Compare commits

..

624 Commits

Author SHA1 Message Date
Cheng Zhao
3e720bd611 Bump v0.27.1 2015-05-28 16:23:29 +08:00
Cheng Zhao
ad89a923e9 Merge pull request #1785 from deepak1556/browser_client_patch
browserClient: dont restart render process for javascript scheme
2015-05-28 16:22:45 +08:00
Cheng Zhao
725115e0b5 Merge pull request #1799 from atom/linux-travis-ci
Use gcc-4.8 on CI machine
2015-05-28 16:22:36 +08:00
Cheng Zhao
419a14a63f Use gcc-4.8 on CI machine 2015-05-28 16:03:06 +08:00
Cheng Zhao
d9102efff7 Merge pull request #1752 from deepak1556/clipboard_patch
clipboard: api to list supported types, reading and writing markup
2015-05-28 15:29:36 +08:00
Cheng Zhao
895ab49857 Merge pull request #1797 from deepak1556/response_headers_patch
fix accessing headers from resourcerequestdetails
2015-05-28 14:44:46 +08:00
Cheng Zhao
ebbb974aca Fix running spec on Windows 2015-05-28 14:43:16 +08:00
Cheng Zhao
8a6ba7c49f Update libchromiumcontent for race condition fix 2015-05-28 14:43:15 +08:00
deepak1556
f98da217e1 fix accessing headers from resourcerequestdetails 2015-05-28 11:20:07 +05:30
Jessica Lord
2060acd914 Merge pull request #1792 from atom/jl-cmd
Replace cmd with bash
2015-05-27 14:37:17 -07:00
Jessica Lord
014d80c359 Replace cmd with bash
Markdown parser doesn’t recognize cmd.
2015-05-27 12:51:19 -07:00
deepak1556
9b7ad675c6 browserClient: dont restart render process for javascript: scheme 2015-05-27 16:39:02 +05:30
Cheng Zhao
6ee8f6e4f2 Bump v0.27.0 2015-05-27 16:57:41 +08:00
deepak1556
4d56281972 restore clipboard.has api and fix docs 2015-05-27 13:35:51 +05:30
deepak1556
5584e3fd49 clipboard: api to list supported types, reading and writing markup 2015-05-27 13:21:56 +05:30
Cheng Zhao
4a376694b4 Merge pull request #1719 from deepak1556/service_worker_patch
devtools: api to inspect service worker
2015-05-27 15:47:41 +08:00
Cheng Zhao
fbdea15649 Update node, fix #634 2015-05-27 15:26:48 +08:00
Cheng Zhao
f961f0617f test: Add case for #634 2015-05-27 15:26:32 +08:00
Cheng Zhao
1c60575dc0 Merge pull request #1738 from deepak1556/http_ptach
webContents: providing header details with response event
2015-05-27 15:05:55 +08:00
Cheng Zhao
abf8ffd3a2 Merge pull request #1689 from deepak1556/ftp_patch
protocol: adding ftp scheme support
2015-05-27 15:04:21 +08:00
Cheng Zhao
935cd92ef3 Update brightray 2015-05-27 15:03:12 +08:00
Cheng Zhao
172a5a71fc docs: "move" and "moved" are platform-dependent 2015-05-27 14:57:14 +08:00
Cheng Zhao
c244e83e10 Merge pull request #1633 from deepak1556/window_event_patch
window: adding resize and move events
2015-05-27 14:54:36 +08:00
Cheng Zhao
291604515f Update libchromiumcontent for optional pdf.dll 2015-05-26 12:44:24 +08:00
Cheng Zhao
904b75ab4a Merge pull request #1669 from hokein/pdf-dll
Load pdf library dynamically
2015-05-26 12:41:51 +08:00
deepak1556
2de0b025f1 retrieve headers from response info 2015-05-24 10:56:25 +05:30
Cheng Zhao
5f52ca918f Merge pull request #1763 from samccone/patch-4
Fix grammatical issues take 3
2015-05-24 10:43:37 +08:00
Cheng Zhao
16a95a42ff Merge pull request #1761 from samccone/patch-3
docs: Fix grammatical issues
2015-05-24 10:42:53 +08:00
Cheng Zhao
4282ed6a3c Merge pull request #1760 from samccone/patch-2
Docs: Fix grammatical issue
2015-05-24 10:42:47 +08:00
Sam Saccone
a642782a00 💄 Fix grammatical issues 2015-05-23 18:44:58 -04:00
Sam Saccone
0bb4e0e44a 💄 Fix grammatical issues 2015-05-23 16:00:09 -04:00
Sam Saccone
d91ddc6177 💄 Fix grammatical issue 2015-05-23 15:41:36 -04:00
deepak1556
2b9826404a using mate::Dictionary instead of base::DictionaryValue 2015-05-23 19:26:47 +05:30
deepak1556
4d5790dc09 return headers as object 2015-05-23 19:26:47 +05:30
deepak1556
c22b138b67 webContents: providing header details with response event 2015-05-23 19:26:47 +05:30
Haojian Wu
fdad5892d9 📝 Add pdf.dll note doc. 2015-05-23 21:39:59 +08:00
Haojian Wu
c3791bba78 Remove duplicated macro. 2015-05-23 19:24:37 +08:00
Haojian Wu
bf5f85645e Remove the multiple rules generate pdf.dll warning in GYP during debug
build.
2015-05-23 19:24:35 +08:00
Haojian Wu
f1f801b7a2 Copy pdf.dll to build directory. 2015-05-23 19:24:30 +08:00
Haojian Wu
5ede62459c Rename PrintHandler to PrintHandlerWin since only used on Windows. 2015-05-23 19:24:29 +08:00
Haojian Wu
abd97a7513 Load pdf component dynamically.
Ship pdf as dll library, electron only loads pdf.dll when calling print
API. In this way, the developer who don't need print feature can safe
remove the pdf.dll in saving their binary size.
2015-05-23 19:24:27 +08:00
Cheng Zhao
30d815e28f Merge pull request #1755 from atom/chrome43
Upgrade to Chrome 43
2015-05-23 12:24:36 +08:00
Cheng Zhao
e233eab4f2 HandleMouseDown is deprecated 2015-05-23 11:58:20 +08:00
Cheng Zhao
b202bba2e6 Don't read Buffer in IO thread 2015-05-22 22:15:13 +08:00
Cheng Zhao
d78efe7c22 Use Local instead of Handle 2015-05-22 19:11:22 +08:00
Cheng Zhao
b169ac016e Start AtomRenderFrameObserver 2015-05-22 15:59:29 +08:00
Cheng Zhao
d1685f79a2 Initialize V8 in browser process
Previously it was initialized by ProxyResolverV8, but after Chrome 43 V8
started to initialize V8 lazily.
2015-05-22 15:30:02 +08:00
Cheng Zhao
01e891652f Fix compilation errors 2015-05-22 15:24:34 +08:00
Cheng Zhao
c82d21b39f Add AtomRenderFrameObserver 2015-05-22 15:01:13 +08:00
Cheng Zhao
63c2a7f1a9 Upgrade to Chrome 43 2015-05-22 14:57:00 +08:00
deepak1556
9a60fde59b alias move and moved event on OS X 2015-05-22 12:24:12 +05:30
Robo
f46fcd158a chnage move hook and add details to doc 2015-05-22 12:13:01 +05:30
Robo
1b1735bca9 avoid unnecessary api calls 2015-05-22 12:13:00 +05:30
deepak1556
3a5977e09f window: adding resize and move events 2015-05-22 12:13:00 +05:30
Cheng Zhao
d34800bb0a Merge pull request #1708 from kevva/patch-1
Add link to `awesome-electron`
2015-05-22 14:24:59 +08:00
Cheng Zhao
662261f84f Merge pull request #1724 from atom/jl-contrib
Add a CONTRIBUTING.md document
2015-05-22 10:33:39 +08:00
Cheng Zhao
33a926c5d3 Fix typo 2015-05-22 10:32:59 +08:00
Cheng Zhao
c372dcb462 Merge pull request #1706 from hammerandchisel/crash-reporter-reinit
Explicitly null the crash reporter before assigning it
2015-05-22 10:17:00 +08:00
Andy Dill
9a768dd4f0 Remove explicit nullptr and add clarifying comment. 2015-05-21 09:02:17 -07:00
Cheng Zhao
82377cbfd5 Bump v0.26.1 2015-05-21 15:52:42 +08:00
Cheng Zhao
83ba21f622 Merge pull request #1741 from atom/gtk-tray-click
Notify the click event in Linux tray icon
2015-05-21 15:46:15 +08:00
Cheng Zhao
f31bfab127 gtk: Notify the click event 2015-05-21 15:22:52 +08:00
Cheng Zhao
466fc9a2fa Remove trailing white space 2015-05-21 15:16:06 +08:00
Cheng Zhao
fd41f1e8bc Merge pull request #1616 from deepak1556/webview_fullscreen_patch
webContents: override fullscreen notification apis for webview
2015-05-21 15:03:48 +08:00
Cheng Zhao
32b2ef3539 Merge pull request #1710 from deepak1556/screen_patch
screen: initialise displays_ vector with primary display
2015-05-21 14:58:27 +08:00
Cheng Zhao
cde6b41a05 Merge pull request #1730 from deepak1556/webview_navigation_patch
navigation: adding clearHistory method
2015-05-21 14:56:30 +08:00
deepak1556
3ecfadf367 screen: initialise displays_ vector with available displays 2015-05-21 11:28:48 +05:30
deepak1556
27c3727ddb use generated constants 2015-05-21 11:07:25 +05:30
deepak1556
ea147c588f protocol: adding ftp scheme support 2015-05-21 10:59:56 +05:30
deepak1556
e8a02316ce also emit html fullscreen notification on windows when its webview contents trigger it 2015-05-21 10:41:53 +05:30
deepak1556
0dcf061dc1 check if window is html or forced fullscreen 2015-05-21 10:16:11 +05:30
deepak1556
f2d91bc53c adding events to notify fullscreen state 2015-05-21 10:16:11 +05:30
deepak1556
ddda8e4197 track html api triggered fullscreen separaely 2015-05-21 10:16:11 +05:30
deepak1556
4fe294ed04 check for renderviewhost availability before using 2015-05-21 10:16:10 +05:30
deepak1556
be57151037 webContents: override fullscreen notification apis for webview 2015-05-21 10:16:10 +05:30
Cheng Zhao
71ee864d1d docs: Open devtools in the quick start example 2015-05-21 11:16:39 +08:00
Cheng Zhao
427b9567ca Merge pull request #1713 from deepak1556/navigation_patch
navigation: fix accessing url from history array for goToIndex
2015-05-21 10:43:34 +08:00
Cheng Zhao
5e7d6f89e8 Merge pull request #1705 from hammerandchisel/node-not-in-path
compile-coffee.py searches for node even on non-windows systems
2015-05-21 10:38:09 +08:00
Andy Dill
7644799790 Check PATH first 2015-05-20 14:37:26 -07:00
Cheng Zhao
dbecc8d5f5 Merge pull request #1701 from CharlieHess/paste-and-match-style
Paste and Match Style
2015-05-20 23:12:46 +08:00
Cheng Zhao
4ae1998d09 Revert #1604 2015-05-20 20:35:54 +08:00
Cheng Zhao
bbd8f091e0 Merge pull request #1737 from magicae/patch-1
doc: fix typo in pepper flash document
2015-05-20 19:24:09 +08:00
Cheng Zhao
6f806190b6 Merge pull request #1604 from deepak1556/contents_event_patch
webContents: providing response headers in did-get-response-details event
2015-05-20 19:08:54 +08:00
deepak1556
e80e4ae02c remove usage global browser context 2015-05-20 16:14:57 +05:30
deepak1556
04b797ff0c webContents: providing response headers in did-get-response-details event 2015-05-20 15:54:30 +05:30
Magica
f960c2dc63 doc: fix typo in pepper flash document
Add brackets around `plugins: true`
2015-05-20 18:04:51 +08:00
Cheng Zhao
9b445c27a2 Merge pull request #1668 from deepak1556/carsh_events_patch
webContents: adding events to detect gpu and plugin process crashes
2015-05-20 17:51:06 +08:00
Cheng Zhao
97a2889fd9 Merge pull request #1663 from khornberg/patch-1
Correct link of debugging UI
2015-05-20 17:44:29 +08:00
deepak1556
c548b9c87e webContents: adding events to detect gpu and plugin process crashes 2015-05-20 15:05:48 +05:30
Cheng Zhao
097d4d9870 Merge pull request #1734 from atom/forked-original-fs
Make "original-fs" available in forked scripts
2015-05-20 16:57:35 +08:00
Cheng Zhao
b238ac5981 Merge pull request #1660 from deepak1556/filesysem_patch
browser: create quota permission context to allow quota request
2015-05-20 14:05:53 +08:00
Cheng Zhao
fe19e63fbc Update brightray for #1653 2015-05-20 13:54:15 +08:00
Cheng Zhao
efd8a8a624 spec: original-fs is available in forked scripts 2015-05-20 13:37:46 +08:00
Cheng Zhao
fa169ee7ff Remove the original-fs.js
It is acutally not needed.
2015-05-20 13:31:28 +08:00
Cheng Zhao
0e7bc6b8ec Make "original-fs" available as built-in module 2015-05-20 13:29:05 +08:00
deepak1556
f8185296f4 add test 2015-05-20 09:23:08 +05:30
Cheng Zhao
4129d45d21 Merge pull request #1596 from deepak1556/protocol_interceptor_patch
protocol: wrapping HttpJobFactory with a default protocol handler to intercept
2015-05-20 11:52:52 +08:00
Cheng Zhao
361505661f Merge pull request #1651 from magicae/ppapi-description-patch
ppapi: fix PPAPI flash plugin description as chromium does
2015-05-20 11:32:09 +08:00
Cheng Zhao
b558485394 Merge pull request #1732 from atom/web-preferences
Simplify how we find NativeWindow from WebContents
2015-05-20 10:45:01 +08:00
Cheng Zhao
a9a331938e Merge pull request #1587 from atom/agent-as-attribute
Allow User Agent on WebView to be set as an attribute
2015-05-20 10:32:09 +08:00
Cheng Zhao
7c69c2846b Simplify how we find NativeWindow from WebContents 2015-05-20 10:27:16 +08:00
Cheng Zhao
cda8b119e2 Upgrade brightray 2015-05-20 09:18:11 +08:00
Paul Betts
975978b414 Don't be so paranoid about empty opts 2015-05-19 14:27:15 -07:00
Paul Betts
5ee0ff9ee9 Fixup code review items 2015-05-19 14:27:15 -07:00
Paul Betts
ca63ea0882 Add documentation 2015-05-19 14:27:15 -07:00
Paul Betts
50c913fe92 Add a test for the user agent 2015-05-19 14:27:15 -07:00
Paul Betts
22f51372f5 Fix typo 2015-05-19 14:27:15 -07:00
Paul Betts
e4d90f747f Pass user agent along like http referrer and set user agent in C++ 2015-05-19 14:27:15 -07:00
Paul Betts
4a8d7c1819 Right before navigate, set the user agent 2015-05-19 14:27:15 -07:00
Paul Betts
3a81a5224d Set up a class for it in web-view-attributes 2015-05-19 14:27:14 -07:00
Paul Betts
3993161a63 Define a new useragent attribute on WebView tag 2015-05-19 14:27:14 -07:00
Jessica Lord
25019de690 Remove example 2015-05-19 11:18:22 -07:00
Jessica Lord
8fea373758 Use Electron repo search url 2015-05-19 11:08:43 -07:00
deepak1556
b0e8cafa00 navigation: adding clearHistory method 2015-05-19 22:41:03 +05:30
Magica
1a8c0230a7 doc: Add pepper flash tutorial link in README. 2015-05-19 20:29:04 +08:00
Magica
6980982e32 ppapi: Add pepper flash tutorial
Fix https://github.com/atom/electron/issues/1674
2015-05-19 20:27:12 +08:00
Cheng Zhao
ec5d05e226 Merge pull request #1670 from joshaber/infer-textured
Use the textured window if it's transparent
2015-05-19 15:51:22 +08:00
Jessica Lord
3387459be2 Start a contributing doc 2015-05-18 18:29:13 -07:00
deepak1556
9963ddc485 implement method on browser window 2015-05-18 20:08:08 +05:30
deepak1556
46d80e8f05 devtools: api to inspect service worker for current webcontents 2015-05-18 19:19:33 +05:30
deepak1556
ef30adcaef navigation: fix accessing url from history array for goToIndex 2015-05-17 03:31:24 +05:30
Kevin Mårtensson
36c376b1ec Add link to awesome-electron 2015-05-16 17:03:19 +02:00
Andy Dill
dcbc6a127b Explicitly null the crash reporter before assigning it to allow the EH to unregister. 2015-05-15 22:37:00 -07:00
Andy Dill
e4415f0021 compile-coffee.py searches for node even on non-windows systems 2015-05-15 22:35:49 -07:00
Paul Betts
b4403fa9ec Merge pull request #1703 from tommoor/patch-3
Small spelling mistake
2015-05-15 13:55:04 -07:00
Tom Moor
a725a49759 Small spelling mistake 2015-05-15 13:09:59 -07:00
Kevin Sawicki
76f1e6d526 Merge pull request #1696 from campersau/patch-1
docs: fixed casing of "Note"
2015-05-15 09:30:28 -07:00
campersau
d19ae50cad docs: fixed casing of "Note" 2015-05-15 17:46:25 +02:00
Charlie Hess
9f461aed68 Update docs. 2015-05-15 00:15:33 -07:00
Charlie Hess
3913e18447 Add WebContents API for PasteAndMatchStyle. 2015-05-15 00:15:19 -07:00
Charlie Hess
90fb7bc52d Merge branch 'master' of https://github.com/atom/atom-shell 2015-05-14 22:37:20 -07:00
joshaber
76d33c37d7 Use the textured window for the frameless case too. 2015-05-12 21:11:43 -04:00
joshaber
033f9bcced If the window's transparent it also needs to be textured. 2015-05-12 21:05:48 -04:00
joshaber
1c97fc79ad Merge remote-tracking branch 'atom/master' 2015-05-12 20:48:15 -04:00
Kyle Hornberg
0097f89adb Correct link of debugging UI
Using the link provided one receives a response of `Cannot GET /[object%20Object]`.

I've tested this on electron 0.25.3 using the example application and node-inspector version 0.10.0.
The url change is the url provided by node-inspector in the terminal window.
2015-05-12 10:29:00 -05:00
deepak1556
32ba219146 allowing file:// URI to access other file:// URIs for filesytem api use 2015-05-12 18:21:48 +05:30
deepak1556
add7f8a4aa add test 2015-05-12 18:03:00 +05:30
deepak1556
2785a4cc48 browser: create quota permission context to allow quota request 2015-05-12 17:52:30 +05:30
Cheng Zhao
827741a9c6 Bump v0.26.0 2015-05-12 17:24:00 +08:00
Cheng Zhao
ca623f16bf Merge pull request #1657 from atom/msvcrt
Link with DLL version of VC++ runtime
2015-05-12 17:23:25 +08:00
Cheng Zhao
3bd54b7920 Ship with vc++ redist files 2015-05-12 17:08:27 +08:00
Cheng Zhao
613a51f5fb Upgrade brightray to link with msvcrt dll 2015-05-12 17:00:36 +08:00
Cheng Zhao
e5d30636c2 Update libchromiumcontent for linking with msvcrt dll 2015-05-12 16:54:18 +08:00
Magica
e1beeb95e3 Fix PPAPI flash plugin description
Fix https://github.com/atom/electron/issues/1637
2015-05-12 06:02:42 +08:00
Cheng Zhao
4ca8039104 Merge pull request #1646 from atom/navigation-in-page
Fix handling in-page navigations
2015-05-11 19:47:15 +08:00
Cheng Zhao
e817192df3 Make history.go work 2015-05-11 16:44:01 +08:00
Cheng Zhao
2bb7497312 Handle when in-page entries are cleared 2015-05-11 16:37:53 +08:00
Cheng Zhao
82ffa4d2b1 Send history operations as asynchronous messages
Sending as sync message will cause weird results for
NavigationController
2015-05-11 16:03:25 +08:00
deepak1556
707503ac40 support https, ws, wss builtin schemes to be intercepted 2015-05-11 12:56:36 +05:30
deepak1556
7fee639edf protocol: wrapping httpjobfactory with a default protocol handler to intercept 2015-05-11 12:32:17 +05:30
Cheng Zhao
d1545a64ae Don't force restart renderer process for in-page navigation 2015-05-11 14:40:40 +08:00
Cheng Zhao
40631edb70 Use Chrome's navigation controller for in-page navigations 2015-05-11 14:30:26 +08:00
Cheng Zhao
4d1cd7e15f Redirect history operations in renderer to browser 2015-05-11 14:29:44 +08:00
Cheng Zhao
4c10925694 Add remote.getCurrentWebContents API 2015-05-11 14:05:20 +08:00
Cheng Zhao
fc2bc20572 Determine wheter a navigation entry is in-page 2015-05-11 13:51:52 +08:00
Cheng Zhao
4a195e6283 Merge pull request #1600 from deepak1556/protocol_error_patch
protocol: adding error job to log error with custom protocols
2015-05-11 13:15:14 +08:00
deepak1556
24bcd3b21e provide default error message 2015-05-11 10:24:44 +05:30
deepak1556
9ab53b0e4b protocol: adding error job to log error with custom protocols 2015-05-11 10:17:31 +05:30
Cheng Zhao
e5380fd671 Merge pull request #1642 from atom/archive-update-header
Keep asar archive's file opened in the archive's whole life time
2015-05-11 12:07:16 +08:00
Cheng Zhao
d9c769fa69 Reuse archive's fd in Node asar API 2015-05-11 11:10:50 +08:00
Cheng Zhao
d8d7e5b9bb Add Archive::GetFD 2015-05-11 11:02:17 +08:00
Cheng Zhao
f8e1dfbbc6 Keep archive's file opened in the archive's whole life time 2015-05-11 10:47:29 +08:00
Cheng Zhao
f02cae1b0a docs: app.terminate is deprecated 2015-05-11 10:22:19 +08:00
Cheng Zhao
fa7f900b2b Merge pull request #1634 from federicobond/patch-1
Fix wording in docs/api/remote.md
2015-05-10 23:27:43 +08:00
Cheng Zhao
75e5695317 Merge pull request #1554 from deepak1556/favicon_patch
webContents: removing getFavicon api
2015-05-10 21:22:01 +08:00
Cheng Zhao
66ef52197a mac: Make "standard-window" option default to true 2015-05-10 21:16:08 +08:00
Cheng Zhao
9e3f108fad Merge pull request #1585 from joshaber/no-texture
Use the standard window background
2015-05-10 21:09:38 +08:00
Cheng Zhao
1571c3537d Merge pull request #1601 from hokein/fix-out-of-bound
Fix a potential out-of-bound issue in Accelerator.
2015-05-10 21:04:45 +08:00
Cheng Zhao
18780487c2 Merge pull request #1636 from atom/ns-mainscreen
Don't use [NSScreen mainScreen]
2015-05-10 20:52:46 +08:00
Cheng Zhao
ce042d0524 mac: Don't use [NSScreen mainScreen] 2015-05-10 16:51:18 +08:00
Cheng Zhao
312b8c95ba Merge pull request #1635 from fengmk2/patch-1
Update China mirrors url
2015-05-10 16:45:51 +08:00
Cheng Zhao
6e8bc6a597 Merge pull request #1558 from deepak1556/ppapi_patch
Ppapi: plugin support
2015-05-10 16:28:14 +08:00
fengmk2
d9c90be1de Update China mirrors url
fixes #1497
2015-05-10 16:15:12 +08:00
Federico Bond
ed023a560e Fix wording in docs/api/remote.md 2015-05-10 02:54:37 -03:00
deepak1556
15ae6b8d36 fix lint errors and add documentation 2015-05-10 10:25:19 +05:30
deepak1556
853ce0bbd7 provide flag to set flash version 2015-05-10 09:22:09 +05:30
deepak1556
1c190388e5 flash_drm_host not required 2015-05-10 09:22:09 +05:30
deepak1556
3fdc4543b8 ppapi flash plugin support 2015-05-10 09:22:09 +05:30
Cheng Zhao
be06a3d562 Upgrade brightray for #1532 2015-05-10 11:41:02 +08:00
Cheng Zhao
95e72c24cc Merge pull request #1532 from hokein/win-print
Make Print API work on Windows.
2015-05-10 11:40:19 +08:00
joshaber
c8d0ef05a6 Docs. 2015-05-08 16:33:57 -04:00
joshaber
85119db81a Use a new option to opt into the standard window. 2015-05-08 16:28:24 -04:00
Cheng Zhao
4d9470c24e Bump v0.25.3 2015-05-08 14:28:30 +08:00
Cheng Zhao
2b1894f356 Merge pull request #1614 from atom/download-x64-directxsdk
Download 64bit directx sdk when building for 64bit target
2015-05-08 13:52:55 +08:00
Cheng Zhao
dca872d987 win: Download 64bit directx sdk when building for 64bit target 2015-05-08 13:42:18 +08:00
Cheng Zhao
4660d3c265 Merge pull request #1584 from atom/upload-mksnapshot
Upload mksnapshot to releases
2015-05-08 13:39:48 +08:00
Cheng Zhao
f2bf8d6db3 Merge pull request #1571 from deepak1556/basic_auth_patch
spec: add test for basic authentication
2015-05-07 19:45:35 +08:00
Cheng Zhao
ae8ac97f32 Upgrade brightray, fixes #1318 2015-05-07 19:44:06 +08:00
Haojian Wu
2b82e523bf Fix a potential out-of-bound issue in Accelerator. 2015-05-07 15:46:38 +08:00
Cheng Zhao
9d54092f41 Merge pull request #1512 from hokein/add-win-key
Add `Super` key support in global-shortcut API.
2015-05-07 10:35:56 +08:00
joshaber
5f357d39b2 If it's frameless then use the textured background. 2015-05-06 10:08:24 -04:00
Cheng Zhao
1817ddc18a Upload mksnapshot to releases 2015-05-06 09:17:40 +08:00
joshaber
102fb66461 Remove the textured background. 2015-05-05 20:53:26 -04:00
Haojian Wu
0f67b1866a Add Super key support in global-shortcut API. 2015-05-05 22:49:32 +08:00
Haojian Wu
f2853a0b89 Some cleanup. 2015-05-05 21:56:58 +08:00
Cheng Zhao
6c5429c7f0 Merge pull request #1579 from atom/upgrade-libchromiumcontent
Update libchromiumcontent
2015-05-05 16:37:59 +08:00
Cheng Zhao
a6ba0cd107 Update libchromiumcontent which includes pdf and ppapi libs 2015-05-05 16:07:47 +08:00
Cheng Zhao
57e6b75871 Merge pull request #1575 from atom/electron-rebuild-notes
Suggest electron-rebuild for building native modules
2015-05-05 15:10:18 +08:00
Paul Betts
904505bb21 Suggest electron-rebuild for building native modules 2015-05-04 22:39:55 -07:00
Cheng Zhao
56afe4dd5d win: Remove unused build setting 2015-05-05 10:25:56 +08:00
deepak1556
2d190b9952 spec: add test for basic authentication 2015-05-04 20:44:36 +05:30
Haojian Wu
298d3a0144 Fix compilation error on OS X. 2015-05-04 20:58:48 +08:00
deepak1556
22c50d0800 webContents: removing getFavicon api 2015-05-04 13:39:13 +05:30
Cheng Zhao
06834b723b Merge pull request #1568 from atom/tray-getposition
Pass bounds instead of position in "clicked" event of "tray"
2015-05-04 13:13:33 +08:00
Cheng Zhao
a04222f398 spec: Fix error when refreshing 2015-05-04 12:51:28 +08:00
Cheng Zhao
0d4d2080ca Implement size and position APIs with bounds API 2015-05-04 12:47:56 +08:00
Cheng Zhao
7142cae041 mac: Also use [NSScreen mainScreen] in other places 2015-05-04 12:33:51 +08:00
Cheng Zhao
921e7e0f91 Merge pull request #1565 from chicoxyzzy/patch-1
docs: fix typo
2015-05-04 12:18:04 +08:00
Cheng Zhao
f2fdc556a4 Merge pull request #1548 from MaxGraey/fix-docs
update using-native-node-modules doc
2015-05-04 12:11:47 +08:00
Cheng Zhao
1835d90bb7 Merge pull request #1551 from atom/log-preload-errors
Log errors in preload script instead of rethrowing
2015-05-04 12:10:21 +08:00
Cheng Zhao
f5cf3556b1 Pass bounds in clicked event of tray 2015-05-04 11:43:22 +08:00
Cheng Zhao
a53b1f7edf win: Mouse position is not notify icon's position 2015-05-04 11:37:23 +08:00
Cheng Zhao
f64dbbea3e docs: Pass bounds in clicked event of tray 2015-05-04 11:34:11 +08:00
Max Graey
6842ac98c3 revert changes of dist url 2015-05-04 10:13:43 +07:00
Cheng Zhao
294dbac869 Merge pull request #1543 from deepak1556/tray_icon_patch
tray: send tray icon position as payload onclick OSX and windows
2015-05-04 11:11:13 +08:00
Cheng Zhao
5f27bb597f Merge pull request #1545 from deepak1556/windows_patch
window: adding setBounds and getBounds api
2015-05-04 11:03:50 +08:00
Cheng Zhao
4c145f44a4 Merge pull request #1519 from atom/reenable-npapi
Reenable NPAPI by setting optional flag
2015-05-04 10:40:33 +08:00
Sergey R
abe63ebd84 docs: fix typo 2015-05-04 02:21:07 +03:00
Paul Betts
4f67415607 Enable NPAPI by default, trump Chromium's default 2015-05-01 16:59:40 -07:00
Paul Betts
e2ec50173f Log errors in preload script instead of rethrowing
At some point, unhandled errors in preload scripts stopped being logged
to console, meaning that preload scripts were very difficult to debug.
Instead, print the error to console (which is what we wanted to have
happen anyways)
2015-05-01 16:11:56 -07:00
Max Graey
d2ab8322b7 update using-native-node-modules doc 2015-05-02 01:28:17 +07:00
deepak1556
9ae59e8ac7 removed move utility and replaced with setbounds 2015-05-01 20:10:46 +05:30
deepak1556
6d7d068e49 tray: send tray icon position as payload onclick OSX 2015-05-01 19:30:01 +05:30
deepak1556
ae6a1b409f window: adding setBounds and getBounds api 2015-05-01 16:20:53 +05:30
Cheng Zhao
4608f5e9cd Bump v0.25.2 2015-05-01 14:57:25 +08:00
Cheng Zhao
9300859983 Merge pull request #1535 from deepak1556/contents_patch
webContents: adding serviceworker helper utilities
2015-05-01 14:56:35 +08:00
Cheng Zhao
52240750a1 Merge pull request #1540 from atom/webview-beforeunload
Make beforeunload handler work in webview
2015-05-01 14:55:52 +08:00
deepak1556
d76bd4a103 webContents: adding serviceworker helper utilities 2015-05-01 12:02:57 +05:30
Cheng Zhao
bfac7f7a17 Make beforeunload work in webview 2015-05-01 13:48:39 +08:00
Cheng Zhao
36d2512ff8 spec: Test beforeunload handler in webview 2015-05-01 13:48:23 +08:00
Cheng Zhao
ca7e2c4d96 Merge pull request #1538 from leemac/patch-1
Typo and missing comma in Desktop Integration doc page
2015-05-01 12:48:55 +08:00
Cheng Zhao
817dfbdc27 Merge pull request #1525 from deepak1556/dom_event_patch
webContents: providing dom-ready event
2015-05-01 12:08:03 +08:00
Lee McKinnon
5fa7ae7d72 Fixing typo in desktop-environment-integration.md
Missing comma in the 'setUserTasks' as well as a typo in the description under "User tasks (Windows)"
2015-04-30 15:40:30 -04:00
Cheng Zhao
c54eca8dff Update node to fix #1472 2015-04-30 17:07:20 +08:00
Cheng Zhao
72f5381c31 Merge pull request #1521 from deepak1556/title_patch
webContents: check for navigation entry before using
2015-04-30 16:54:14 +08:00
Cheng Zhao
7ca2363d78 Merge pull request #1533 from atom/iojs-headers
Upload io.js headers
2015-04-30 16:17:26 +08:00
Cheng Zhao
dec7c40fd8 Also upload iojs-*-.tar.gz 2015-04-30 16:01:54 +08:00
Cheng Zhao
a8846e0432 Also upload headers to iojs's locations 2015-04-30 15:36:54 +08:00
Haojian Wu
ff87592722 Make Print API work on Windows. 2015-04-30 13:42:08 +08:00
deepak1556
8c5f171a93 webContents: providing dom-ready event 2015-04-30 09:58:29 +05:30
Daniel Hengeveld
ea74e825c9 Merge pull request #1527 from frewsxcv/patch-1
Enable syntax highlighting in README
2015-04-29 12:28:52 -07:00
Corey Farwell
2b3ef714bd Enable syntax highlighting in README
Primarily to fade the comments in the code block
2015-04-29 13:56:31 -04:00
Cheng Zhao
23afffa46d Chaning src of webview should always do a load
Previously changing src to the same value won't have any effect, which
does not follow the behavior of browsers.
2015-04-29 17:57:16 +08:00
Cheng Zhao
129cdb7680 spec,win: Fix page-favicon-updated event spec 2015-04-29 17:31:56 +08:00
Cheng Zhao
8d3404d26c win: Fix compilation error 2015-04-29 15:13:46 +08:00
Cheng Zhao
05e0564426 Merge pull request #1477 from atom/dont-rig-app-name
Provide an optional way to explicitly set the AppUserModelID
2015-04-29 14:10:12 +08:00
deepak1556
d8be645d5a webContents: check for navigation entry before using 2015-04-29 08:57:49 +05:30
Cheng Zhao
3f499f69ff Merge pull request #1520 from atom/disable-auto-hide-cursor
Add option to disable hiding cursor when typing
2015-04-29 10:39:44 +08:00
Cheng Zhao
75b24c7d76 docs: disable-auto-hide-cursor option 2015-04-29 10:28:42 +08:00
Cheng Zhao
c6cf91d11f Add 'disable-auto-hide-cursor' option 2015-04-29 10:26:31 +08:00
Cheng Zhao
3a50c9e48c Update to the new patch for acceptsFirstMouse 2015-04-29 10:26:31 +08:00
Paul Betts
7c2b1468c8 Fix typo 2015-04-28 15:49:16 -07:00
Paul Betts
fb6c80d12e Create an explicit API for setting the App User Model ID 2015-04-28 12:23:58 -07:00
Kevin Sawicki
d826e1e5fb Merge pull request #1514 from mnquintana/patch-1
Logo png -> svg
2015-04-28 08:57:35 -07:00
Machiste N. Quintana
04a0aaa35f Logo png -> svg
Fixes broken image in Readme
2015-04-28 10:48:54 -04:00
Cheng Zhao
f5fbd52dbd Merge pull request #1505 from atom/default-help-menu
Add help menu to default app
2015-04-28 17:55:06 +08:00
Daniel Hengeveld
5575d17d0e Merge pull request #1495 from bendrucker/grammar
Fix grammar in NW.js comparison
2015-04-27 13:30:26 -07:00
Ben Drucker
0e7970fec5 Fix grammar in NW.js comparison 2015-04-27 15:55:25 -04:00
Kevin Sawicki
fdfd8807a0 Tweak path docs 2015-04-27 10:17:15 -07:00
Kevin Sawicki
da07e72f20 Add -h/--help usage message 2015-04-27 10:17:14 -07:00
Kevin Sawicki
f4a27f699a Add help menu to electron site 2015-04-27 10:17:14 -07:00
Kevin Sawicki
e3c21424de Add default help menu 2015-04-27 10:17:14 -07:00
Kevin Sawicki
b5aa2a31a1 Make full screen menu a toggler 2015-04-27 10:17:14 -07:00
Cheng Zhao
05ae1960d1 Merge pull request #1502 from atom/renderer-restart
Manage navigation history with JavaScript on user side
2015-04-27 22:00:23 +08:00
Cheng Zhao
dde791d475 Allow calling goBack for multiple times 2015-04-27 15:11:59 +08:00
Cheng Zhao
16b2f08cd3 Don't use Chromium's history list 2015-04-27 15:11:59 +08:00
Cheng Zhao
0143a45488 Implement our own NavigationController 2015-04-27 15:11:59 +08:00
Cheng Zhao
2f1683445b Only append command line params for renderer process 2015-04-27 15:11:59 +08:00
Cheng Zhao
4c78f98da6 Check if it is guest process before updating process ID 2015-04-27 15:11:59 +08:00
Cheng Zhao
3ff2959f0c spec: Native modules should work after navigation in webview 2015-04-27 15:11:59 +08:00
Cheng Zhao
36c4b1705d Update guest process id when navigating 2015-04-27 15:11:58 +08:00
Cheng Zhao
d8adbc0875 NULL => nullptr 2015-04-27 15:11:58 +08:00
Cheng Zhao
b527846ee4 Use our new way to restart renderer process
As a side effect, it will also restart the renderer process of webview
tag guests.
2015-04-27 15:11:58 +08:00
Cheng Zhao
ee45f0e8bc Upgrade libchromiumcontent 2015-04-27 15:11:58 +08:00
Cheng Zhao
ca5ee0fc81 Merge pull request #1491 from atom/minimal-mac-menu
Remove native actions in Mac default menu
2015-04-25 21:00:26 +08:00
Cheng Zhao
ecf29f72bc mac: Remove unused action handler 2015-04-25 20:41:12 +08:00
Cheng Zhao
c811beb1e2 mac: Remove all unnecessary default menu items 2015-04-25 20:36:09 +08:00
Cheng Zhao
0c091428d3 Merge pull request #1455 from deepak1556/fullscreen_patch
window: supports HTML5 fullscreen api
2015-04-25 16:16:57 +08:00
Cheng Zhao
858198a2bd Merge pull request #1461 from deepak1556/webview_devtools_patch
webview: add inspectElement method
2015-04-25 16:14:13 +08:00
Cheng Zhao
1649d8f900 Merge pull request #1438 from deepak1556/api_web_view_patch
webview: page-favicon-updated navigation event and getFavicon api
2015-04-25 13:04:43 +08:00
Cheng Zhao
eb42fdbbc6 Merge pull request #1453 from deepak1556/asar_patch
asar: make fs async methods create errors asynchronously
2015-04-25 13:04:35 +08:00
deepak1556
6cc571bdfe include headers only in places used 2015-04-25 10:13:52 +05:30
deepak1556
da648511b3 asar: make fs async methods create errors asynchronously 2015-04-25 10:08:02 +05:30
deepak1556
18b3dfa350 removed will-navigate and did-navigate events 2015-04-25 09:50:28 +05:30
deepak1556
05be71e9bc fix getFavcion api in webview to return dataUrl 2015-04-25 09:50:28 +05:30
deepak1556
36819e2638 added did-navigate event, getFavicon api and workaround webview spec 2015-04-25 09:50:28 +05:30
deepak1556
9b585458c1 webview: will-navigate and page-favicon-set navigation events 2015-04-25 09:50:28 +05:30
Cheng Zhao
c424d0e9f3 Upgrade CoffeeScript to 1.9.2 2015-04-25 10:45:28 +08:00
Cheng Zhao
81783b255e Increase timeout for some tests 2015-04-25 10:45:16 +08:00
Cheng Zhao
80c8ab4c39 Style fix 2015-04-25 10:35:28 +08:00
Cheng Zhao
826a4e0e48 Merge branch 'master' of https://github.com/MaxGraey/electron into MaxGraey-master 2015-04-25 10:29:34 +08:00
Cheng Zhao
7917748b21 ⬆️ asar@0.5.0 2015-04-24 13:06:49 +08:00
Daniel Hengeveld
b7f974f469 Merge pull request #1481 from bhargavrpatel/patch-1
Minor grammatical fixes
2015-04-23 17:18:26 -07:00
Bhargav Patel
5c5fd377f7 Minor grammatical fixes
Fixed some run-on sentances and changed structor of some.
2015-04-23 20:12:04 -04:00
Kevin Sawicki
0a995c3731 Mention new twitter account 2015-04-23 17:03:05 -07:00
Kevin Sawicki
47b754e914 Merge pull request #1480 from lazaruslarue/patch-1
fix minor text error
2015-04-23 16:50:05 -07:00
lazarus
00ef99826d fix minor text error 2015-04-23 16:32:41 -07:00
Kevin Sawicki
45943302ee Merge pull request #1476 from mnquintana/patch-2
Add david-dm dependency status badge to Readme
2015-04-23 14:02:47 -07:00
Machiste N. Quintana
2157f898bb Add david-dm dependency status badge to Readme 2015-04-23 17:00:40 -04:00
Kevin Sawicki
132c7aba2d Merge pull request #1475 from mnquintana/patch-1
Add Electron logo to Readme
2015-04-23 13:52:14 -07:00
Machiste N. Quintana
1ae88f0f0f 🎨 2015-04-23 16:50:43 -04:00
Machiste N. Quintana
c0f0fcba7b Add Electron logo to Readme 2015-04-23 16:46:48 -04:00
deepak1556
cdb1711fe1 webview: add inspectElement method 2015-04-23 15:18:13 +05:30
deepak1556
20b4cae980 window: supports HTML5 fullscreen api 2015-04-23 12:14:29 +05:30
Cheng Zhao
67bc4afe88 Bump v0.25.1 2015-04-23 13:29:34 +08:00
Cheng Zhao
fb78169396 Don't add tag in bump-version.py
It will be done by GitHub Releases.
2015-04-23 13:28:29 +08:00
Cheng Zhao
ba7e26539f Upgrade brightray for #1462 2015-04-23 13:27:11 +08:00
Cheng Zhao
500d15f53a Also remove user-defined search paths in renderer 2015-04-23 13:17:18 +08:00
Cheng Zhao
fad977e27d Simplify how we remove user-defined search paths 2015-04-23 13:13:58 +08:00
deepak1556
4983ef77bd module: remove system paths from search 2015-04-23 12:55:34 +08:00
Cheng Zhao
4a6066c69e Update native_mate 2015-04-23 10:22:09 +08:00
Cheng Zhao
1690df9bcf Merge branch 'api_content_tracing_patch' of https://github.com/deepak1556/atom-shell into deepak1556-api_content_tracing_patch 2015-04-23 10:21:15 +08:00
Kevin Sawicki
5c94f7ccd4 Merge pull request #1464 from bnvk/patch-1
updated bash path to ./Electron.app/Contents/MacOS/Electron
2015-04-22 14:08:09 -07:00
Kevin Sawicki
494c3f3255 Merge pull request #1466 from gappsby/master
node.js --> io.js
2015-04-22 14:04:29 -07:00
Florian Hämmerle
ec4d596189 Update quick-start.md 2015-04-22 22:14:50 +02:00
Brennan Novak
bc04e951cf updated bash path to ./Electron.app/Contents/MacOS/Electron
it had the trailing /Atom which no longer exists
2015-04-22 16:22:08 +02:00
Cheng Zhao
e3109c9f1f Bump v0.25.0 2015-04-22 05:50:55 +00:00
Cheng Zhao
6fc6aae62d Merge pull request #1454 from atom/chrome42
Upgrade to Chrome 42
2015-04-22 12:28:49 +08:00
Cheng Zhao
b44c66b5c2 win: Update referenced symbols on ia32 2015-04-22 12:08:04 +08:00
Cheng Zhao
20c1530278 win: Update referenced symbols on x64 2015-04-22 10:12:16 +08:00
Cheng Zhao
a213a8639f win: OpenItemViaShell is removed 2015-04-22 10:04:30 +08:00
Cheng Zhao
38583ca721 linux: Update brightray to fix crash 2015-04-21 21:43:53 +08:00
Cheng Zhao
5126f02184 Update the commit of libchromiumcontent to download 2015-04-21 20:01:07 +08:00
Cheng Zhao
c910686b01 mac: Update brightray to fix Release linking 2015-04-21 19:06:28 +08:00
Cheng Zhao
23833cf7f4 Update user agent 2015-04-21 19:01:29 +08:00
Cheng Zhao
b37c73436b Fix API changes 2015-04-21 18:56:08 +08:00
Cheng Zhao
32f0ae5b50 Upgrade to Chrome 42 2015-04-21 18:56:00 +08:00
Cheng Zhao
87809e65aa Fix refreshing specs 2015-04-21 18:55:44 +08:00
Max Graey
916fa4b9a8 Merge pull request #1 from atom/master
Merge with forked
2015-04-21 04:39:54 +07:00
Kevin Sawicki
217e8f4078 Add mention of previous name 2015-04-20 11:22:50 -07:00
Kevin Sawicki
21f05fc363 Update discuss category to electron 2015-04-20 09:34:32 -07:00
Cheng Zhao
51b5e953f4 Align the " in #1426 2015-04-20 20:04:02 +08:00
Cheng Zhao
5bdb4b9aa1 Merge pull request #1426 from deepak1556/api_pm_patch
pm: throw when initialising module before ready event
2015-04-20 20:02:44 +08:00
Cheng Zhao
bcfe243b3c Upgrade brightray for #1442 2015-04-20 19:48:07 +08:00
Cheng Zhao
2814dc316a Merge branch 'NKMR6194-master' 2015-04-20 19:40:37 +08:00
Cheng Zhao
fc3026dcfe Merge branch 'master' of https://github.com/NKMR6194/electron into NKMR6194-master 2015-04-20 19:40:04 +08:00
deepak1556
1f580cbb67 pm: throw when initialising module before ready event 2015-04-20 13:47:36 +05:30
Cheng Zhao
237b7bedaa Merge pull request #1428 from SimplyAhmazing/master
Documentation Fix: edits quick-start doc file section "The renderer process" segment
2015-04-20 15:51:01 +08:00
Cheng Zhao
c34c5965c5 Merge pull request #1437 from maxogden/patch-2
Add electron-prebuilt npm instructions to README
2015-04-20 15:48:18 +08:00
Cheng Zhao
8f611687f1 Merge pull request #1421 from tommoor/patch-2
Updated documentation for power-monitor
2015-04-20 15:24:24 +08:00
Cheng Zhao
a6ad824ccb Merge pull request #1446 from atom/fix-debugger
Fix starting debugger in forked scripts
2015-04-20 15:22:16 +08:00
Cheng Zhao
c1737e5c16 Parse the debug args of Node 2015-04-20 15:12:46 +08:00
Cheng Zhao
1d148fe2fb Remove our own debugger implementation
Previously it was used because Node doesn't provide one for latest V8.
2015-04-20 14:35:57 +08:00
Cheng Zhao
88a1c7973c Set node::node_isolate to fix crash 2015-04-20 14:32:41 +08:00
Cheng Zhao
7a52a4cff1 Also enable the debugger 2015-04-20 14:10:15 +08:00
Robo
ee08d98d2e node: start debugger for node run during a forked process 2015-04-20 14:06:56 +08:00
Cheng Zhao
9cf4156928 Upgrade node for debugger flags 2015-04-20 14:05:47 +08:00
SAKATA Sinji
45f022b9db docs: Atom Shell => Electron in quick-start.md 2015-04-20 00:46:00 +09:00
Max Graey
0d3cc8aaa7 Fix some draw issues in native mac os window
Fix some non-transparent corners and lacking redraw while resizing non-frame window
2015-04-18 19:08:22 +07:00
Charlie Hess
5b69421625 Revert "Update submodules"
This reverts commit 397a503da3.
2015-04-17 14:29:50 -07:00
Charlie Hess
397a503da3 Update submodules 2015-04-17 14:26:29 -07:00
deepak1556
51cadc6e90 nativemate: moved std::set converter 2015-04-18 01:29:57 +05:30
Max Ogden
3971249868 Add electron-prebuilt npm instructions to README 2015-04-17 11:25:06 -07:00
Cheng Zhao
96c886a8f0 Fix upload.py for the rename 2015-04-17 15:53:46 +08:00
Cheng Zhao
0033240c1f Bump v0.24.0 2015-04-17 15:30:17 +08:00
Cheng Zhao
d0d6512330 win: Update the rc file
We should find a way to generate from atom.gyp.
2015-04-17 15:29:47 +08:00
Cheng Zhao
d535305ff1 Use electron in release title 2015-04-17 15:26:45 +08:00
Cheng Zhao
cd0aa4a956 Merge pull request #1389 from atom/rename-to-electron
Rename to electron
2015-04-17 15:22:07 +08:00
Cheng Zhao
0bab50ed80 Fix typo 2015-04-17 15:10:48 +08:00
Cheng Zhao
eb6fa46041 Use product_name for generating zip archives 2015-04-17 12:13:35 +08:00
Cheng Zhao
b0b6747456 docs: Update the rebranding guide 2015-04-17 11:59:40 +08:00
Kevin Sawicki
2f9de5a0e9 Merge pull request #1430 from simurai/rename-to-electron-icon
Electron icon
2015-04-16 09:15:11 -07:00
simurai
95250f4940 Replace icons 2015-04-17 00:38:14 +09:00
Cheng Zhao
1f1cb12d46 docs: Build for 64bit target on Windows 2015-04-16 14:50:46 +08:00
Cheng Zhao
d2682233fd docs: Atom Shell => Electron 2015-04-16 11:31:12 +08:00
Cheng Zhao
d878bd33d7 docs: Update links in README
The npm instructions are removed for now, will add it back when we had
electron in npm registry.
2015-04-16 11:10:24 +08:00
Ahmed Abdalla
3a850b94f5 removes use of passive voice 2015-04-15 14:01:09 -04:00
Ahmed Abdalla
a179e48e3b fixes spelling typo 2015-04-15 13:58:30 -04:00
Tom Moor
2de9123cfd Update power-monitor.md 2015-04-15 08:17:10 -07:00
Tom Moor
378e56e254 Updated documentation for power-monitor
Added two undocumented events, added note that must be used after ready event.
2015-04-14 21:03:58 -07:00
Ahmed Abdalla
0d3aaaf0af edits quick-start "The renderer Process" segment 2015-04-14 23:04:19 -04:00
Cheng Zhao
76316e5e65 Forgot to set default version in crash reporter 2015-04-14 17:37:22 +08:00
Cheng Zhao
14e05c6d68 mac: Remove "Atom"s from default menu 2015-04-14 17:27:04 +08:00
Cheng Zhao
49c82b3b93 atom => electron in atom.gyp 2015-04-14 17:23:31 +08:00
Cheng Zhao
c7468278df Change the window class names 2015-04-14 16:18:57 +08:00
Cheng Zhao
e04c58f398 mac: Generate Info.plist from gyp variables 2015-04-14 16:09:34 +08:00
Cheng Zhao
1200d641b8 Change the names in specs 2015-04-14 15:59:45 +08:00
Cheng Zhao
2d8d328f02 Rename hard-coded application names in code 2015-04-14 15:55:41 +08:00
Cheng Zhao
c6c305a827 Don't hard-code product name in crash-repoter 2015-04-14 15:39:48 +08:00
Cheng Zhao
b86f149512 Set process.versions['electron'] 2015-04-14 14:18:20 +08:00
Cheng Zhao
ecc14dd023 mac: Avoid making frameworks_path for twice 2015-04-14 14:15:53 +08:00
Cheng Zhao
c20dc06c96 PRODUCT_NAME => ATOM_PRODUCT_NAME 2015-04-14 14:13:03 +08:00
Cheng Zhao
a72c7b38a5 Don't hard code exec path in child_process.fork 2015-04-14 14:05:30 +08:00
Cheng Zhao
4353c6d402 mac: Allow modifying helper app's name 2015-04-14 13:51:08 +08:00
Cheng Zhao
29338e2fa4 Lines should have <= 80 columns 2015-04-13 20:10:51 +08:00
Cheng Zhao
c10b9ea511 Merge pull request #1411 from theojulienne/accessibility-support
mac: Dynamically enable accessibility based on VoiceOver status
2015-04-13 19:57:32 +08:00
Cheng Zhao
fc7bddf0d9 Merge pull request #1409 from deepak1556/webcontents_geturl_patch
webContents: fix dereferencing null in getURL
2015-04-13 17:07:36 +08:00
Cheng Zhao
e28fc190f2 Merge pull request #1382 from deepak1556/webcontents_patch
webContents: workaround reloadIgnoringcache without breaking node integration
2015-04-13 14:54:06 +08:00
Cheng Zhao
eddb23d56b Merge pull request #1387 from deepak1556/shell_patch
shell: fix regression for moveItemToTrash on mac
2015-04-13 14:51:59 +08:00
deepak1556
a3f630e55c webContents: workaround reloadIgnoringcache without breaking node integration 2015-04-13 11:03:16 +05:30
deepak1556
175f397173 shell: fix regression for moveItemToTrash on mac 2015-04-13 10:57:58 +05:30
Cheng Zhao
a4c01b2336 Remove the did-get-response-details spec
It is not reliable to use external http resource for specs, should setup
our own http server.
2015-04-13 12:24:14 +08:00
Cheng Zhao
64f9f7e906 Merge pull request #1386 from deepak1556/web_contents_patch
webContents: event to detect status of requested resource
2015-04-13 11:59:37 +08:00
Cheng Zhao
91c9f590dd Remove the NativeImage::MakeTemplateImage method
Is duplicate with SetTemplateImage.
2015-04-13 11:53:24 +08:00
Cheng Zhao
f11988a354 Merge pull request #1383 from deepak1556/nativeimage_patch
nativeImage: adding setTemplateImage method
2015-04-13 11:47:58 +08:00
Cheng Zhao
6137c2317d Improves #1373
* Don't pollute Menu API.
* Add examples in docs.
* Moves the docs from menu-item.md to menu.md.
2015-04-13 11:22:33 +08:00
Cheng Zhao
7a97488023 Merge pull request #1373 from FoldingText/position-menu-items
Add position attribute for menu items
2015-04-13 09:46:13 +08:00
Theo Julienne
ddfd2bc4be [mac] Dynamically enable accessibility based on VoiceOver status 2015-04-12 10:44:27 -07:00
Cheng Zhao
74be99de31 Use atom.gyp to generate filenames in upload-windows-pdb.py 2015-04-12 22:26:00 +08:00
Cheng Zhao
7255962bd3 Fix uploading index.json under OS X 2015-04-12 22:24:07 +08:00
Cheng Zhao
b413acddb8 Update tmp dir prefix 2015-04-12 22:10:46 +08:00
Cheng Zhao
6ba57dcfa3 Use atom.gyp to generate paths in test.py 2015-04-12 22:10:02 +08:00
Cheng Zhao
f8d64ef1e4 Use atom.gyp to generate filenamse in create-dist.py 2015-04-12 22:06:06 +08:00
Cheng Zhao
af37af3e1c Rename some functions in bootstrap.py 2015-04-12 22:04:48 +08:00
Cheng Zhao
4e7ed50162 Use "project_name" in atom.gyp as default target in build.py 2015-04-12 21:52:56 +08:00
Cheng Zhao
43fe82e1e5 Merge branch 'master' into rename-to-electron 2015-04-12 21:49:08 +08:00
Cheng Zhao
159e013ce5 docs: Don't mention apm
It causes confusions, and it is not convineint any more, see #793.
2015-04-12 21:46:50 +08:00
Cheng Zhao
61100c9c0b No need to store apm's version in index.json 2015-04-12 21:42:11 +08:00
Cheng Zhao
1027fe9991 linux: Fix wrong off_t type under 32bit arch 2015-04-12 08:16:17 +00:00
Cheng Zhao
f979847e06 linux: Upgrade brightray to fix linking problem 2015-04-12 07:56:53 +00:00
Cheng Zhao
26ac617692 win: vccorlib120.dll is not needed anymore 2015-04-12 15:27:28 +08:00
Cheng Zhao
d0f2da944f Add missing 'v' in some places 2015-04-12 14:23:48 +08:00
Cheng Zhao
64aaa2bcb1 Merge pull request #1405 from atom/win_64bit
Add 64bit Windows build
2015-04-12 13:46:05 +08:00
Robo
847ae5abe4 webContents: fix dereferencing null in getURL 2015-04-12 10:51:05 +05:30
Cheng Zhao
d19a1063d5 Fix pylint warnings 2015-04-12 13:15:11 +08:00
Cheng Zhao
a724d6d684 Bump v0.23.0 2015-04-12 12:59:04 +08:00
Cheng Zhao
b53123d5e7 Add clean script 2015-04-12 12:55:38 +08:00
Cheng Zhao
e5a7921873 Don't push when bumping version 2015-04-12 12:52:07 +08:00
Cheng Zhao
b9b7928e7d Move version info to atom.gyp and discard apm dependency
Fixes #1408.
Closes #1359.
2015-04-12 12:45:18 +08:00
Cheng Zhao
6b1dd0d413 s3_config should be in lib.config 2015-04-12 12:00:02 +08:00
Cheng Zhao
aa835ad38a Upload index.json when publishing release 2015-04-12 11:36:55 +08:00
Cheng Zhao
6b1f2215b2 win: Do not copy vc runtime dlls
We now statically link with vc runtime.
2015-04-12 11:23:41 +08:00
Cheng Zhao
f64a3dd349 Add win32-ia32 in index.json 2015-04-12 00:02:45 +08:00
Cheng Zhao
8a418ba347 Upload SHASUMS.txt when publishing release 2015-04-12 00:01:10 +08:00
Cheng Zhao
c30d806837 win: Upload node.lib of x64 build 2015-04-11 23:40:10 +08:00
Cheng Zhao
fabaa2af94 Upgrade breakpad and brightray 2015-04-11 23:28:59 +08:00
Cheng Zhao
03bdd8814e Fix typo 2015-04-11 23:03:54 +08:00
Cheng Zhao
b5450801d0 win: Upload node.dll.pdb 2015-04-11 22:15:50 +08:00
Cheng Zhao
9e7c2a6fe4 spec: Suppress crash-reporter test on 64bit Windows 2015-04-11 20:15:31 +08:00
Cheng Zhao
aa07d5e557 win: Fix linking problem on x64 2015-04-11 19:51:11 +08:00
Cheng Zhao
f32cd5a35e win: Suppress size loss warnings 2015-04-11 19:17:03 +08:00
Cheng Zhao
6175380bc0 Explicit set default arch 2015-04-11 18:30:01 +08:00
Cheng Zhao
de016e72a5 win: Build with the arch chosen by user 2015-04-11 18:07:22 +08:00
Cheng Zhao
1a6832d849 TARGET_PLATFORM => PLATFORM
TARGET_PLATFORM is quite misleading since it is actually host platform.
2015-04-11 17:30:52 +08:00
Cheng Zhao
ca50cbb5ff Allow specifying the arch of libchromiumcontent to download 2015-04-11 17:29:21 +08:00
Cheng Zhao
252ac465c5 Merge pull request #1384 from atom/component_build
Links with Chromium directly instead of linking its shared library
2015-04-11 14:12:16 +08:00
Cheng Zhao
8e9e05f062 Merge pull request #1402 from Tribex/patch-1
Fix spelling and grammar errors in build-system-overview.md.
2015-04-11 13:49:47 +08:00
Cheng Zhao
3a59cd3b72 Upgrade brightray 2015-04-11 13:38:16 +08:00
Cheng Zhao
f997dbb01d Remove some duplicated symbols 2015-04-11 13:07:19 +08:00
Joshua Bemenderfer
4defde0b61 Fix spelling and grammar errors.
Particularly in the spelling of the bootstrap and build script names. That threw me off a bit.
2015-04-11 12:46:13 +08:00
Cheng Zhao
ab94c3f49e docs: Add "Build system overview" chapter 2015-04-11 12:11:57 +08:00
Cheng Zhao
21ca4de1af docs: Output dir is changed 2015-04-10 21:56:02 +08:00
Cheng Zhao
dfa6fedaed Don't link with shared_librayr of boringssl in Release mode 2015-04-10 19:00:06 +08:00
Cheng Zhao
88b6a60c29 Hide symbols of openssl
So we will avoid conflicts with boringssl.
2015-04-10 17:56:46 +08:00
Cheng Zhao
a13343800a win: Generate node.lib from node.dll 2015-04-10 15:45:45 +08:00
Cheng Zhao
1f66006c93 win: Fix link errors caused by libicu 2015-04-10 15:35:25 +08:00
Cheng Zhao
3a5bb588e5 No more need to reference node's symbols 2015-04-10 15:20:45 +08:00
Cheng Zhao
8894cfab50 mac: Fix libicu symbols not included 2015-04-10 13:47:21 +08:00
Cheng Zhao
8500a53c23 mac: Improve how we find .dSYM bundle 2015-04-10 13:24:05 +08:00
Cheng Zhao
5f2fe27b65 linux: Fix linking with node and v8 2015-04-10 12:22:18 +08:00
Cheng Zhao
a400bb5997 Build node as shared library 2015-04-09 21:16:22 +08:00
Cheng Zhao
ae9d90eaa6 Upgrade libchromiumcontent for win32 fix 2015-04-09 16:00:29 +08:00
Cheng Zhao
dcae08c128 win: Move common configs to gyp 2015-04-09 14:40:31 +08:00
Cheng Zhao
2d6b6e4578 win: No more chromiumcontent.dll.pdb 2015-04-09 14:10:28 +08:00
Cheng Zhao
97c76c19c4 win: Register msdia80.dll in dump-symbols.py 2015-04-09 13:21:33 +08:00
Cheng Zhao
78ed9b1b23 linux: Move '-g' to brightray 2015-04-09 12:06:02 +08:00
Cheng Zhao
52b875f199 mac: Move strip flags to brightray 2015-04-09 11:30:40 +08:00
Cheng Zhao
b947cb5057 Move clang flag to brightray 2015-04-09 10:52:15 +08:00
Cheng Zhao
b6af1cf93c Remove appveyor.yml
I don't think we will use it in future.
2015-04-09 10:15:24 +08:00
Cheng Zhao
0a56f34d04 Move filename_rules.gypi to brightray 2015-04-09 10:14:50 +08:00
Cheng Zhao
596f14eca5 Allow testing release build 2015-04-09 10:00:31 +08:00
Cheng Zhao
44d0bceff4 linux: Move some building flags to brightray 2015-04-09 09:59:57 +08:00
Cheng Zhao
b8e38ad14e linux: Strip binaries wen creating distribution 2015-04-09 09:05:51 +08:00
Kevin Sawicki
6615ef1054 Atom Shell -> Electron 2015-04-08 10:16:10 -07:00
Kevin Sawicki
6ca4623ae1 Begin Atom Shell -> Electron rename 2015-04-08 09:50:58 -07:00
Cheng Zhao
0bc5d6438e Fix generating distribution for chromedriver 2015-04-08 22:22:40 +08:00
Cheng Zhao
42dafd47fd Separate symbols generation from building 2015-04-08 22:12:47 +08:00
Cheng Zhao
4bb0ac271b mac: Fix linking error when running chromedriver 2015-04-08 22:05:33 +08:00
deepak1556
15a648a879 webContents: event to detect status of requested resource 2015-04-08 19:14:47 +05:30
Cheng Zhao
565065ed6b Remove unused copy_chromedriver target 2015-04-08 20:16:02 +08:00
Cheng Zhao
f5e6c62418 linux: Fix create distribution for chromedriver 2015-04-08 20:08:27 +08:00
Cheng Zhao
c3f8ef06b6 Ship with correct files in distribution 2015-04-08 19:46:57 +08:00
Cheng Zhao
c2852b5b8c linux: Add some more building requirements 2015-04-08 19:46:37 +08:00
Cheng Zhao
c5b85b23eb Remove linux_clang option
We are always using clang now.
2015-04-08 19:22:02 +08:00
Cheng Zhao
555e06573a Fix pylint warnings 2015-04-08 19:19:40 +08:00
Cheng Zhao
1b3b2cd402 linux: Don't dynamically load libgio
It conflicts with statically linked libgio.
2015-04-08 19:15:48 +08:00
deepak1556
efd294d69d nativeImage: adding setTemplateImage method 2015-04-08 14:39:14 +05:30
Cheng Zhao
f9b5156c2c linux: Fix static linking 2015-04-08 16:46:05 +08:00
Cheng Zhao
5467476173 Don't verbose output in ci 2015-04-08 16:37:12 +08:00
Cheng Zhao
d8fbfe6885 Fix typo 2015-04-08 10:05:06 +08:00
Cheng Zhao
4ce3b407ab Merge pull request #1363 from deepak1556/native_window_mac_patch
nativeWindowMac: check for web_contents before clipping
2015-04-08 09:04:16 +08:00
Kevin Sawicki
d763984b77 Merge pull request #1377 from tommoor/patch-1
Add 'error' event to auto-updater module documentation
2015-04-07 09:40:43 -07:00
Tom Moor
8bd711ea66 Add 'error' event to auto-updater documentation 2015-04-07 09:21:29 -07:00
Cheng Zhao
1a36770286 Only build static_library version of libchromiumcontent in CI 2015-04-07 23:41:42 +08:00
Jesse Grosjean
c8a3c14a8c Add position attribute for menu items
This commit adds a position attribute for menu items defined in menu
templates. When the final menu is built the position attribute is used
to determine menu item positions in a similar design to how Eclipse
positions menu items.
2015-04-07 11:14:28 -04:00
Cheng Zhao
105aec4ea9 Upgrade libchromiumcontent 2015-04-07 15:12:20 +00:00
Cheng Zhao
0cc36377a5 win: Ignore duplicate symbols between BoringSSL and OpenSSL 2015-04-07 22:56:21 +08:00
Cheng Zhao
9a458785b6 Simplify how we build node.lib 2015-04-07 18:37:05 +08:00
Cheng Zhao
21014614fc Link boringssl as shared_library 2015-04-07 18:26:56 +08:00
Cheng Zhao
0890ea716f win: Fix a compiler warning in Node 2015-04-07 14:03:16 +08:00
Cheng Zhao
2351c11da4 No more need to ship vc runtime
The release version now static links with vc runtime
2015-04-07 13:51:40 +08:00
Cheng Zhao
0f97bf03fa win: Fix Debug build 2015-04-07 13:50:58 +08:00
Cheng Zhao
2f5090d667 Fix minor typo 2015-04-07 12:36:16 +08:00
Cheng Zhao
f169772031 Link boringssl and node together in one binary 2015-04-07 12:28:57 +08:00
Cheng Zhao
fb00c28026 Merge pull request #1356 from deepak1556/web_view_patch
webview: adding page-title-set event
2015-04-07 10:54:07 +08:00
Cheng Zhao
54bb072ae0 Merge pull request #1353 from deepak1556/args_patch
atomMain: initialise uv_setup_args
2015-04-07 09:59:10 +08:00
Cheng Zhao
54f2b3248d Merge pull request #1350 from joshuabenuck/patch-1
Update build-instructions-windows.md
2015-04-07 09:52:38 +08:00
Cheng Zhao
e95ab2ddb8 Merge pull request #1337 from deepak1556/api_devtools_window_patch
browserWindow: adding devtools-focused event
2015-04-07 09:50:31 +08:00
Kevin Sawicki
3ae604ca4e Merge pull request #1358 from LMGTech/master
add `to` in sentence for grammar
2015-04-06 09:04:30 -07:00
deepak1556
1d97c2c8f2 nativeWindowMac: check for web_contents before clipping 2015-04-06 15:22:26 +05:30
Cheng Zhao
e334e6e822 win: Upgrade brightray for linking problem 2015-04-06 16:28:52 +08:00
Cheng Zhao
0dffa0f4bb win: Copy necessary shared libraries 2015-04-06 14:26:06 +08:00
Cheng Zhao
938069a389 win: Fix linking 2015-04-06 14:21:21 +08:00
TJ Krusinski
c98774b3df add to in sentence for grammar
Simply a small grammar improvement.
2015-04-05 16:18:20 -04:00
Cheng Zhao
e64101e31f Upgrade libchromiumcontent to use the static_library build 2015-04-05 22:30:03 +08:00
Cheng Zhao
5ffa22812f Download static_library build of libchromiumcontent 2015-04-05 22:28:51 +08:00
Robo
87af6f9c80 webview: adding page-title-set event 2015-04-05 14:50:42 +05:30
Robo
8e8c5e1846 atomMain: initialise uv_setup_args 2015-04-04 19:20:21 +05:30
Joshua Benuck
0de623693d Update build-instructions-windows.md
In the troubleshooting section, include a recommendation to install the latest Visual Studio update if you run into a fatal internal compiler error while building.
2015-04-03 20:22:50 -07:00
Cheng Zhao
bb7217a58c Move filenames to another gyp file 2015-04-03 14:39:25 +08:00
Cheng Zhao
40c85f2042 Do not download symbols 2015-04-03 14:33:52 +08:00
Cheng Zhao
d3abf64bd2 Strip generate binaries 2015-04-03 12:06:23 +08:00
Cheng Zhao
8b7d875e40 Use "R" and "D" as short names for config 2015-04-03 11:59:14 +08:00
Cheng Zhao
8a91000083 Fix linking node and chromium together 2015-04-03 11:38:04 +08:00
Cheng Zhao
dab9e9be67 Also build with static_library version of libchromiumcontent 2015-04-02 23:03:23 +08:00
Cheng Zhao
ca161e29ce Fix calling our new APIs in patch 2015-04-02 23:02:22 +08:00
Robo
3aefa5f549 browserWindow: adding devtools-focused event 2015-04-02 12:23:57 +05:30
Cheng Zhao
736afb32a0 Link with component build shared libraries 2015-04-02 14:06:23 +08:00
Cheng Zhao
14de7ddea8 Upgrade brightray for component build 2015-04-02 13:46:41 +08:00
Cheng Zhao
5ff9588b48 Merge pull request #1343 from atom/node_lib
Build node as shared library
2015-04-02 13:03:57 +08:00
Cheng Zhao
219a461f78 Fix generating node.lib 2015-04-02 11:06:01 +08:00
Cheng Zhao
e2000c4418 Fix wrong update of node 2015-04-02 10:36:55 +08:00
Cheng Zhao
0a99140b2a Update brightray for #1337 2015-04-02 10:20:32 +08:00
Cheng Zhao
95528f9207 linux: Fix relocation error when compiling as shared library 2015-04-01 23:44:55 +08:00
Cheng Zhao
211e386c89 win: Fix linking errors 2015-04-01 21:33:08 +08:00
Cheng Zhao
2915774644 No more need to reference node's native bindings 2015-04-01 21:07:29 +08:00
Cheng Zhao
cc443f730c Do not need to copy node.dll to PRODUCT_DIR 2015-04-01 20:33:25 +08:00
Cheng Zhao
80c9f864be Ship node.dll 2015-04-01 20:27:36 +08:00
Cheng Zhao
7e49645998 Build node as shared library 2015-04-01 20:26:46 +08:00
Cheng Zhao
761aa0e95c Merge pull request #1342 from atom/iojs-update
⬆️ iojs@1.6.3
2015-04-01 19:17:28 +08:00
Cheng Zhao
2980adfd79 Fix calling js2c 2015-04-01 19:03:50 +08:00
Cheng Zhao
da71175968 ⬆️ iojs@1.6.3 2015-04-01 18:43:09 +08:00
Cheng Zhao
8de1ccb2c0 Merge pull request #1340 from atom/zip_verify_file_exist
Verify whether the file exists before including it in zip
2015-04-01 10:34:51 +08:00
Cheng Zhao
953060e17c Verify whether the file exists before including it in zip 2015-04-01 10:23:17 +08:00
Kevin Sawicki
2612e8fe8e Merge pull request #1339 from evlogii/patch-1
fix link
2015-03-31 18:06:50 -07:00
Evlogiy Sutormin
430a6c2915 fix link 2015-04-01 03:24:39 +03:00
Kevin Sawicki
acd6797a5f Merge pull request #1332 from anhulife/patch-1
modify param description
2015-03-31 09:12:48 -07:00
liang feng
5460b84c60 modify param description 2015-03-30 16:13:11 +08:00
Cheng Zhao
ce3d9f44ff win: Fix compilation error
MSDN said, "These are pre-Win32 error codes and are no longer supported or
defined in any public header file."
2015-03-30 09:55:02 +08:00
Cheng Zhao
c5c686fe8c linux: Fix compilation error 2015-03-29 21:35:40 +08:00
Cheng Zhao
59c95f6a7d Bump v0.22.3 2015-03-29 21:16:42 +08:00
Cheng Zhao
a53bed567e Upgrade brightray to enable content module's webui
Fixes #663.
2015-03-29 21:08:50 +08:00
Cheng Zhao
9b68777b4b Minor fixes of #1309
* Line length should <= 80 cols.
* Add missing "s".
2015-03-29 20:40:02 +08:00
Cheng Zhao
3b1be743ef Merge pull request #1309 from hokein/workspace-visible-api
Add workspace visible APIs
2015-03-29 20:37:07 +08:00
Cheng Zhao
b987656f1f It is not safe to get exit code once the child is reaped
Continues #1311.
2015-03-29 20:32:23 +08:00
Cheng Zhao
e0d0e7651f Merge pull request #1311 from deepak1556/api_shell_patch
shell: return status for moveitemtotrash operation
2015-03-29 20:02:13 +08:00
Cheng Zhao
922def8ce0 Cleanup command line handling code 2015-03-29 19:59:16 +08:00
Cheng Zhao
d9c22396ea Revert "Don't store args as std::string"
This reverts commit 8482575d1f.

There is weird thing happened if we tried to store raw "argv" on Linux.
2015-03-29 19:53:47 +08:00
Cheng Zhao
9f30933d3a Merge pull request #1324 from vprasanth/master
Simplified Mirrors sub-section.
2015-03-29 19:16:59 +08:00
Cheng Zhao
8482575d1f Don't store args as std::string 2015-03-29 19:11:25 +08:00
Cheng Zhao
286ad19771 win: d3dcompiler_46.dll => d3dcompiler_47.dll 2015-03-29 18:51:02 +08:00
Cheng Zhao
27d2dbf375 Merge pull request #1256 from deepak1556/process_arg_patch
implemetation of AtomCommandline to preserve args
2015-03-29 18:47:13 +08:00
Cheng Zhao
657b1cf63a Merge pull request #1327 from atom/d3dcompiler_47
Ship d3dcompiler_47.dll
2015-03-29 18:46:00 +08:00
Cheng Zhao
0477c01fae win: Ship d3dcompiler_47.dll 2015-03-29 18:33:25 +08:00
Cheng Zhao
fdc07dea17 docs: Say more about what is renderer process and main process 2015-03-29 16:02:31 +08:00
Cheng Zhao
85838fbf1a Merge pull request #1313 from ArtskydJ/browser-side-to-main-process
Renamed browser-side to main process
2015-03-29 15:25:56 +08:00
Haojian Wu
0342854e25 Update workspace visible APIs. 2015-03-29 10:01:52 +08:00
Prasanth Vaaheeswaran
8a62f62e50 Simplified Mirrors section. 2015-03-28 18:34:59 -04:00
Robo
bedea89dcf shell: return status for moveItemToTrash on all platforms 2015-03-29 00:47:50 +05:30
deepak1556
399f47ef0f implemetation of AtomCommandline to preserve args 2015-03-28 22:41:00 +05:30
Cheng Zhao
8aae7c4440 Merge pull request #1323 from atom/no-zygote
Disable zygote process on Linux
2015-03-29 00:32:53 +08:00
Cheng Zhao
4663fdb446 Update libchromiumcontent to disable zygote process 2015-03-29 00:14:07 +08:00
Joseph Dykstra
4a508e0e41 reverted incorrect changes 2015-03-27 07:46:26 -05:00
Cheng Zhao
21a09d3ae8 Improve #1317 2015-03-27 16:29:14 +08:00
Cheng Zhao
2505f8b8b2 Merge pull request #1317 from deepak1556/api_window_patch
npapi: warn users loading npapi plugins on unsupported platform
2015-03-27 16:26:03 +08:00
Cheng Zhao
32cd068427 Improve #1307 2015-03-27 16:24:33 +08:00
Cheng Zhao
b52771e729 Merge pull request #1307 from deepak1556/api_windows_patch
providing option to undock devtools from browser-window
2015-03-27 16:19:45 +08:00
deepak1556
69d958b94e providing option to undock devtools from browser-window 2015-03-27 13:32:08 +05:30
Cheng Zhao
b77c03357c docs: BrowserWindow.capturePage nows returns NativeImage 2015-03-27 14:43:29 +08:00
Robo
c677a44688 npapi: warn users loading npapi plugins on unsupported platform 2015-03-27 04:14:01 +05:30
Joseph Dykstra
b6875ad49b Renamed browser-side to main process
renamed a few occurances of "web page" to "renderer"
renamed a few files that had "browser" in their name to "main-process"
note that there are still many occurances of web page.
2015-03-26 10:20:31 -05:00
Haojian Wu
296d5c4515 📝 Add document for workspace visible APIs. 2015-03-26 18:59:24 +08:00
Cheng Zhao
2cdfef286a Merge pull request #1304 from atom/restore-window-state
Restore window state when showing window
2015-03-26 17:05:40 +08:00
Cheng Zhao
83024ea509 views: Restore window state when showing window 2015-03-26 16:43:38 +08:00
Cheng Zhao
0611f9156f docs: Mention the debug symbols, closes #1201 2015-03-26 15:59:07 +08:00
Cheng Zhao
e2bdbae262 Merge pull request #1303 from atom/write-image
Add clipboard.writeImage API
2015-03-26 15:58:08 +08:00
Cheng Zhao
b54e786b09 linux: it is now safe to use clipboard in renderer process 2015-03-26 15:46:08 +08:00
Cheng Zhao
b5bc8c9811 spec: clipboard.readImage() 2015-03-26 15:25:34 +08:00
Haojian Wu
476b61322f Add SetVisibleOnAllWorkspaces/IsVisibleOnAllWorkspaces API.
These two APIs are only available on OS X/Linux platforms.
2015-03-26 14:18:37 +08:00
Cheng Zhao
6f082b630d Add clipboard.writeImage API 2015-03-26 12:54:15 +08:00
Cheng Zhao
0bb7abd7a4 docs: clipboard.readImage/.writeImage 2015-03-26 12:53:48 +08:00
Cheng Zhao
ae5586408f Enable setting only one side of max/min size, fixes #1301 2015-03-26 12:23:38 +08:00
Cheng Zhao
a4342fd5ba Unify how we throw exceptions 2015-03-26 11:34:41 +08:00
Cheng Zhao
1a6677bdc3 Merge pull request #1297 from deepak1556/api_tray_patch
throw when trying to create tray before app is ready
2015-03-26 11:28:54 +08:00
Cheng Zhao
6eee6c181d Improves #1295 2015-03-26 11:27:06 +08:00
Cheng Zhao
5c8f2d4e69 Merge pull request #1295 from deepak1556/app_patch
allow setting loglevel
2015-03-26 11:20:08 +08:00
deepak1556
15f59b54dd allow setting loglevel 2015-03-25 20:53:01 +05:30
deepak1556
e87041bcfc throw when trying to create tray before app is ready 2015-03-25 20:10:01 +05:30
Cheng Zhao
1804466334 Print localizedFailureReason for autoUpdater errors
This is to help solve #1292.
2015-03-25 21:20:07 +08:00
Cheng Zhao
a9301ea1d0 Merge pull request #1290 from deepak1556/protocol_patch
[doc]: fix when to use protocol module
2015-03-25 21:02:49 +08:00
Cheng Zhao
a0770580e9 Merge pull request #1294 from atom/catch-sign
Catches and reports exception thrown from Squirrel
2015-03-25 20:14:07 +08:00
Cheng Zhao
ee71b2044e Catch the exception thrown from Squirrel 2015-03-25 19:59:36 +08:00
Cheng Zhao
665363b356 Use Release build of Squirrel 2015-03-25 19:54:59 +08:00
Cheng Zhao
b68eccf784 docs: "options" is a required parameter in dialog.showMessageBox 2015-03-25 19:20:32 +08:00
Cheng Zhao
62f9c3def0 mac: Don't rely on autorelease to delete window delegate
When quiting while closing window, it will leave the window delegate out
of the autorelease pool and crash.

Fixes #881.
2015-03-25 18:51:29 +08:00
deepak1556
a360ef7c8d [doc]: fix when to use protocol module 2015-03-25 11:54:21 +05:30
Nathan Sobo
9f9f772ff5 🎨 Add "-ize" suffix 2015-03-24 17:18:51 -06:00
Cheng Zhao
c4b240170d Merge pull request #1288 from deepak1556/native_window_mac_patch
added acceptsFirstMouse for controlRegionView
2015-03-24 18:57:17 +08:00
deepak1556
7006a14031 added acceptsFirstMouse for controlRegionView 2015-03-24 14:50:29 +05:30
Cheng Zhao
d46c64f64b Clean up WebView's ipc listeners when detached, fix #1185 2015-03-23 23:07:53 +08:00
Cheng Zhao
5bd3cfc4f6 Update brightray 2015-03-23 08:30:01 +00:00
Cheng Zhao
2e172a1053 Bump v0.22.2 2015-03-23 16:31:23 +08:00
Cheng Zhao
2f5345e10d Merge pull request #1284 from atom/subpixel-font
Bring back the "subpixel-font-scaling" option
2015-03-23 16:30:58 +08:00
Cheng Zhao
2a4b04bac6 Update libchromiumcontent 2015-03-23 16:29:32 +08:00
Cheng Zhao
30e931f10b Revert "The "subpixel-font-scaling" option is removed"
This reverts commit 98fbe5127b.
2015-03-23 16:29:32 +08:00
Cheng Zhao
266fadcb96 Update native_mate for #1112 2015-03-23 16:24:38 +08:00
Cheng Zhao
475f624113 docs: The right way of "set", according to #1126 2015-03-23 10:35:35 +08:00
Cheng Zhao
de76ab97fb docs: Fix setting GYP_DEFINES on Windows, closes #1126 2015-03-23 10:19:49 +08:00
Cheng Zhao
414c91a637 Cleanup #1275 2015-03-23 09:51:50 +08:00
Cheng Zhao
adce07785a Merge pull request #1275 from lygstate/master
Add runas as devDependencies, or the python script will install it again...
2015-03-23 09:49:10 +08:00
Cheng Zhao
1479f73612 Simplify #1261 2015-03-21 19:20:52 +08:00
Cheng Zhao
5e8c478b2c Merge pull request #1261 from deepak1556/asar_lib_patch
fs.read empty files from asar archive
2015-03-21 19:17:49 +08:00
Cheng Zhao
db056f8730 Merge pull request #1267 from atom/asar-unpacked
Add support for asar archives with unpacked files
2015-03-21 19:11:54 +08:00
Cheng Zhao
f5dc8fc80d docs: How to use asar archive with unpacked files 2015-03-21 19:11:15 +08:00
Yonggang Luo
fa011c3d97 Add runas as devDependencies, or the python script will install it again and again.
The options of register_msdia80_dll.js should be admin.
Fix the problem of runas not works cause it will escape command parameters by default.
2015-03-21 17:28:07 +08:00
deepak1556
fdc10e4e5f Allow reading empty file from asar archive 2015-03-21 14:56:03 +05:30
Cheng Zhao
73ce16fc52 Remove unneeded log 2015-03-20 21:32:10 +08:00
Cheng Zhao
b5a8cfb704 Recognize asar archive with unpacked files 2015-03-20 20:34:58 +08:00
Cheng Zhao
dc82553fc3 spec: Test asar archive with unpacked files 2015-03-20 20:34:31 +08:00
Cheng Zhao
1df033dce8 No need to override child_process.fork
We already support asar in Node mode.
2015-03-20 19:04:11 +08:00
Cheng Zhao
2c0b50a7e9 Merge pull request #1208 from deepak1556/protocol
adding protocol.RequestBufferJob api
2015-03-20 10:34:31 +08:00
Cheng Zhao
9bae54f917 Avoid extra copy of data in capturePage 2015-03-20 10:26:42 +08:00
deepak1556
9eac8ef266 add protocol.RequestBuffer api 2015-03-19 09:36:57 +05:30
Cheng Zhao
24d615d428 docs: Add a "s" 2015-03-19 11:25:53 +08:00
321 changed files with 8724 additions and 6134 deletions

1
.gitignore vendored
View File

@@ -10,4 +10,5 @@ node_modules/
*.xcodeproj
*.swp
*.pyc
debug.log
npm-debug.log

71
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,71 @@
# Contributing to Electron
:+1::tada: First off, thanks for taking the time to contribute! :tada::+1:
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
* You can create an issue [here](https://github.com/atom/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/atom/electron/issues?utf8=✓&q=is%3Aissue+)
to see if a similar issue has already been submitted
## Submitting Pull Requests
* Include screenshots and animated GIFs in your pull request whenever possible.
* Follow the CoffeeScript, JavaScript, C++ and Python [coding style defined in docs](/docs/development/coding-style.md).
* Write documentation in [Markdown](https://daringfireball.net/projects/markdown).
* Use short, present tense commit messages. See [Commit Message Styleguide](#git-commit-messages-styleguide).
## Styleguides
### General Code
* 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
* 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 Mac OS
* :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

@@ -1,36 +1,47 @@
# Atom Shell [![Build Status](https://travis-ci.org/atom/atom-shell.svg?branch=master)](https://travis-ci.org/atom/atom-shell)
[![Electron Logo](http://electron.atom.io/images/electron-logo.svg)](http://electron.atom.io/)
The Atom Shell framework lets you write cross-platform desktop applications
[![Build Status](https://travis-ci.org/atom/electron.svg?branch=master)](https://travis-ci.org/atom/electron)
[![devDependency Status](https://david-dm.org/atom/electron/dev-status.svg)](https://david-dm.org/atom/electron#info=devDependencies)
:zap: *formerly known as Atom Shell* :zap:
The Electron framework lets you write cross-platform desktop applications
using JavaScript, HTML and CSS. It is based on [io.js](http://iojs.org) and
[Chromium](http://www.chromium.org) and is used in the [Atom
editor](https://github.com/atom/atom).
Follow [@ElectronJS](https://twitter.com/electronjs) on Twitter for important
announcements.
## Downloads
Prebuilt binaries of atom-shell for Linux, Windows and Mac can be found on the
[releases](https://github.com/atom/atom-shell/releases) page.
Prebuilt binaries and debug symbols of Electron for Linux, Windows and Mac can
be found on the [releases](https://github.com/atom/electron/releases) page.
You can also use [`npm`](https://docs.npmjs.com/) to install prebuilt atom-shell binaries:
You can also use [`npm`](https://docs.npmjs.com/) to install prebuilt electron
binaries:
```
# Install globally in your $PATH
npm install atom-shell -g
```sh
# Install the `electron` command globally in your $PATH
npm install electron-prebuilt -g
# Install as a development dependency
npm install atom-shell --save-dev
npm install electron-prebuilt --save-dev
```
### Mirrors
- [China Mirror](https://npm.taobao.org/mirrors/atom-shell): Improve download speeds for Chinese user.
- [China](https://npm.taobao.org/mirrors/electron)
## Documentation
Guides and the API reference are located in the
[docs](https://github.com/atom/atom-shell/tree/master/docs) directory. It also
contains documents describing how to build and contribute to atom-shell.
[docs](https://github.com/atom/electron/tree/master/docs) directory. It also
contains documents describing how to build and contribute to Electron.
## Community
There is an [`atom-shell` category on the Atom forums](http://discuss.atom.io/category/atom-shell)
There is an [`electron` category on the Atom forums](http://discuss.atom.io/category/electron)
as well as an `#atom-shell` channel on Freenode.
Check out [awesome-electron](https://github.com/sindresorhus/awesome-electron) for a community maintained list of useful example apps, tools and resources.

View File

@@ -1,28 +0,0 @@
# appveyor file
# http://www.appveyor.com/docs/appveyor-yml
version: "{build}"
init:
- git config --global core.autocrlf input
environment:
matrix:
- nodejs_version: 0.10
platform:
- x86
install:
- ps: Install-Product node $env:nodejs_version
- cmd: SET PATH=C:\Program Files (x86)\MSBuild\12.0\bin\;%PATH%
- cmd: SET PATH=C:\python27;%PATH%
- cmd: python script/bootstrap.py
- cmd: python script/build.py -c Debug
test_script:
- node --version
- npm --version
- cmd: python script/cpplint.py
- cmd: python script/coffeelint.py
build: off

711
atom.gyp
View File

@@ -1,399 +1,25 @@
{
'variables': {
'includes': [
'vendor/native_mate/native_mate_files.gypi',
],
'project_name%': 'atom',
'product_name%': 'Atom',
'app_sources': [
'atom/app/atom_main.cc',
'atom/app/atom_main.h',
],
'bundle_sources': [
'atom/browser/resources/mac/atom.icns',
],
'coffee_sources': [
'atom/browser/api/lib/app.coffee',
'atom/browser/api/lib/atom-delegate.coffee',
'atom/browser/api/lib/auto-updater.coffee',
'atom/browser/api/lib/browser-window.coffee',
'atom/browser/api/lib/content-tracing.coffee',
'atom/browser/api/lib/dialog.coffee',
'atom/browser/api/lib/global-shortcut.coffee',
'atom/browser/api/lib/ipc.coffee',
'atom/browser/api/lib/menu.coffee',
'atom/browser/api/lib/menu-item.coffee',
'atom/browser/api/lib/power-monitor.coffee',
'atom/browser/api/lib/protocol.coffee',
'atom/browser/api/lib/screen.coffee',
'atom/browser/api/lib/tray.coffee',
'atom/browser/api/lib/web-contents.coffee',
'atom/browser/lib/chrome-extension.coffee',
'atom/browser/lib/guest-view-manager.coffee',
'atom/browser/lib/guest-window-manager.coffee',
'atom/browser/lib/init.coffee',
'atom/browser/lib/objects-registry.coffee',
'atom/browser/lib/rpc-server.coffee',
'atom/common/api/lib/callbacks-registry.coffee',
'atom/common/api/lib/clipboard.coffee',
'atom/common/api/lib/crash-reporter.coffee',
'atom/common/api/lib/id-weak-map.coffee',
'atom/common/api/lib/native-image.coffee',
'atom/common/api/lib/original-fs.coffee',
'atom/common/api/lib/shell.coffee',
'atom/common/lib/init.coffee',
'atom/renderer/lib/chrome-api.coffee',
'atom/renderer/lib/init.coffee',
'atom/renderer/lib/inspector.coffee',
'atom/renderer/lib/override.coffee',
'atom/renderer/lib/web-view/guest-view-internal.coffee',
'atom/renderer/lib/web-view/web-view.coffee',
'atom/renderer/lib/web-view/web-view-attributes.coffee',
'atom/renderer/lib/web-view/web-view-constants.coffee',
'atom/renderer/api/lib/ipc.coffee',
'atom/renderer/api/lib/remote.coffee',
'atom/renderer/api/lib/screen.coffee',
'atom/renderer/api/lib/web-frame.coffee',
],
'coffee2c_sources': [
'atom/common/lib/asar.coffee',
'atom/common/lib/asar_init.coffee',
],
'lib_sources': [
'atom/app/atom_content_client.cc',
'atom/app/atom_content_client.h',
'atom/app/atom_main_delegate.cc',
'atom/app/atom_main_delegate.h',
'atom/app/atom_main_delegate_mac.mm',
'atom/app/node_main.cc',
'atom/app/node_main.h',
'atom/browser/api/atom_api_app.cc',
'atom/browser/api/atom_api_app.h',
'atom/browser/api/atom_api_auto_updater.cc',
'atom/browser/api/atom_api_auto_updater.h',
'atom/browser/api/atom_api_content_tracing.cc',
'atom/browser/api/atom_api_dialog.cc',
'atom/browser/api/atom_api_global_shortcut.cc',
'atom/browser/api/atom_api_global_shortcut.h',
'atom/browser/api/atom_api_menu.cc',
'atom/browser/api/atom_api_menu.h',
'atom/browser/api/atom_api_menu_views.cc',
'atom/browser/api/atom_api_menu_views.h',
'atom/browser/api/atom_api_menu_mac.h',
'atom/browser/api/atom_api_menu_mac.mm',
'atom/browser/api/atom_api_power_monitor.cc',
'atom/browser/api/atom_api_power_monitor.h',
'atom/browser/api/atom_api_protocol.cc',
'atom/browser/api/atom_api_protocol.h',
'atom/browser/api/atom_api_screen.cc',
'atom/browser/api/atom_api_screen.h',
'atom/browser/api/atom_api_tray.cc',
'atom/browser/api/atom_api_tray.h',
'atom/browser/api/atom_api_web_contents.cc',
'atom/browser/api/atom_api_web_contents.h',
'atom/browser/api/atom_api_web_view_manager.cc',
'atom/browser/api/atom_api_window.cc',
'atom/browser/api/atom_api_window.h',
'atom/browser/api/event.cc',
'atom/browser/api/event.h',
'atom/browser/api/event_emitter.cc',
'atom/browser/api/event_emitter.h',
'atom/browser/auto_updater.cc',
'atom/browser/auto_updater.h',
'atom/browser/auto_updater_delegate.h',
'atom/browser/auto_updater_linux.cc',
'atom/browser/auto_updater_mac.mm',
'atom/browser/auto_updater_win.cc',
'atom/browser/atom_access_token_store.cc',
'atom/browser/atom_access_token_store.h',
'atom/browser/atom_browser_client.cc',
'atom/browser/atom_browser_client.h',
'atom/browser/atom_browser_context.cc',
'atom/browser/atom_browser_context.h',
'atom/browser/atom_browser_main_parts.cc',
'atom/browser/atom_browser_main_parts.h',
'atom/browser/atom_browser_main_parts_linux.cc',
'atom/browser/atom_browser_main_parts_mac.mm',
'atom/browser/atom_javascript_dialog_manager.cc',
'atom/browser/atom_javascript_dialog_manager.h',
'atom/browser/atom_resource_dispatcher_host_delegate.cc',
'atom/browser/atom_resource_dispatcher_host_delegate.h',
'atom/browser/atom_speech_recognition_manager_delegate.cc',
'atom/browser/atom_speech_recognition_manager_delegate.h',
'atom/browser/browser.cc',
'atom/browser/browser.h',
'atom/browser/browser_linux.cc',
'atom/browser/browser_mac.mm',
'atom/browser/browser_win.cc',
'atom/browser/browser_observer.h',
'atom/browser/javascript_environment.cc',
'atom/browser/javascript_environment.h',
'atom/browser/mac/atom_application.h',
'atom/browser/mac/atom_application.mm',
'atom/browser/mac/atom_application_delegate.h',
'atom/browser/mac/atom_application_delegate.mm',
'atom/browser/native_window.cc',
'atom/browser/native_window.h',
'atom/browser/native_window_views.cc',
'atom/browser/native_window_views.h',
'atom/browser/native_window_mac.h',
'atom/browser/native_window_mac.mm',
'atom/browser/native_window_observer.h',
'atom/browser/net/adapter_request_job.cc',
'atom/browser/net/adapter_request_job.h',
'atom/browser/net/asar/asar_protocol_handler.cc',
'atom/browser/net/asar/asar_protocol_handler.h',
'atom/browser/net/asar/url_request_asar_job.cc',
'atom/browser/net/asar/url_request_asar_job.h',
'atom/browser/net/atom_url_request_job_factory.cc',
'atom/browser/net/atom_url_request_job_factory.h',
'atom/browser/net/url_request_string_job.cc',
'atom/browser/net/url_request_string_job.h',
'atom/browser/node_debugger.cc',
'atom/browser/node_debugger.h',
'atom/browser/ui/accelerator_util.cc',
'atom/browser/ui/accelerator_util.h',
'atom/browser/ui/accelerator_util_mac.mm',
'atom/browser/ui/accelerator_util_views.cc',
'atom/browser/ui/cocoa/atom_menu_controller.h',
'atom/browser/ui/cocoa/atom_menu_controller.mm',
'atom/browser/ui/cocoa/event_processing_window.h',
'atom/browser/ui/cocoa/event_processing_window.mm',
'atom/browser/ui/file_dialog.h',
'atom/browser/ui/file_dialog_gtk.cc',
'atom/browser/ui/file_dialog_mac.mm',
'atom/browser/ui/file_dialog_win.cc',
'atom/browser/ui/message_box.h',
'atom/browser/ui/message_box_mac.mm',
'atom/browser/ui/message_box_views.cc',
'atom/browser/ui/tray_icon.cc',
'atom/browser/ui/tray_icon.h',
'atom/browser/ui/tray_icon_gtk.cc',
'atom/browser/ui/tray_icon_gtk.h',
'atom/browser/ui/tray_icon_cocoa.h',
'atom/browser/ui/tray_icon_cocoa.mm',
'atom/browser/ui/tray_icon_observer.h',
'atom/browser/ui/tray_icon_win.cc',
'atom/browser/ui/views/frameless_view.cc',
'atom/browser/ui/views/frameless_view.h',
'atom/browser/ui/views/global_menu_bar_x11.cc',
'atom/browser/ui/views/global_menu_bar_x11.h',
'atom/browser/ui/views/menu_bar.cc',
'atom/browser/ui/views/menu_bar.h',
'atom/browser/ui/views/menu_delegate.cc',
'atom/browser/ui/views/menu_delegate.h',
'atom/browser/ui/views/menu_layout.cc',
'atom/browser/ui/views/menu_layout.h',
'atom/browser/ui/views/submenu_button.cc',
'atom/browser/ui/views/submenu_button.h',
'atom/browser/ui/views/win_frame_view.cc',
'atom/browser/ui/views/win_frame_view.h',
'atom/browser/ui/win/notify_icon_host.cc',
'atom/browser/ui/win/notify_icon_host.h',
'atom/browser/ui/win/notify_icon.cc',
'atom/browser/ui/win/notify_icon.h',
'atom/browser/ui/x/window_state_watcher.cc',
'atom/browser/ui/x/window_state_watcher.h',
'atom/browser/ui/x/x_window_utils.cc',
'atom/browser/ui/x/x_window_utils.h',
'atom/browser/web_view_manager.cc',
'atom/browser/web_view_manager.h',
'atom/browser/web_dialog_helper.cc',
'atom/browser/web_dialog_helper.h',
'atom/browser/window_list.cc',
'atom/browser/window_list.h',
'atom/browser/window_list_observer.h',
'atom/common/api/api_messages.h',
'atom/common/api/atom_api_asar.cc',
'atom/common/api/atom_api_clipboard.cc',
'atom/common/api/atom_api_crash_reporter.cc',
'atom/common/api/atom_api_id_weak_map.cc',
'atom/common/api/atom_api_id_weak_map.h',
'atom/common/api/atom_api_native_image.cc',
'atom/common/api/atom_api_native_image.h',
'atom/common/api/atom_api_native_image_mac.mm',
'atom/common/api/atom_api_shell.cc',
'atom/common/api/atom_api_v8_util.cc',
'atom/common/api/atom_bindings.cc',
'atom/common/api/atom_bindings.h',
'atom/common/api/object_life_monitor.cc',
'atom/common/api/object_life_monitor.h',
'atom/common/asar/archive.cc',
'atom/common/asar/archive.h',
'atom/common/asar/asar_util.cc',
'atom/common/asar/asar_util.h',
'atom/common/asar/scoped_temporary_file.cc',
'atom/common/asar/scoped_temporary_file.h',
'atom/common/common_message_generator.cc',
'atom/common/common_message_generator.h',
'atom/common/crash_reporter/crash_reporter.cc',
'atom/common/crash_reporter/crash_reporter.h',
'atom/common/crash_reporter/crash_reporter_linux.cc',
'atom/common/crash_reporter/crash_reporter_linux.h',
'atom/common/crash_reporter/crash_reporter_mac.h',
'atom/common/crash_reporter/crash_reporter_mac.mm',
'atom/common/crash_reporter/crash_reporter_win.cc',
'atom/common/crash_reporter/crash_reporter_win.h',
'atom/common/crash_reporter/linux/crash_dump_handler.cc',
'atom/common/crash_reporter/linux/crash_dump_handler.h',
'atom/common/crash_reporter/win/crash_service.cc',
'atom/common/crash_reporter/win/crash_service.h',
'atom/common/crash_reporter/win/crash_service_main.cc',
'atom/common/crash_reporter/win/crash_service_main.h',
'atom/common/draggable_region.cc',
'atom/common/draggable_region.h',
'atom/common/google_api_key.h',
'atom/common/linux/application_info.cc',
'atom/common/native_mate_converters/accelerator_converter.cc',
'atom/common/native_mate_converters/accelerator_converter.h',
'atom/common/native_mate_converters/file_path_converter.h',
'atom/common/native_mate_converters/gfx_converter.cc',
'atom/common/native_mate_converters/gfx_converter.h',
'atom/common/native_mate_converters/gurl_converter.h',
'atom/common/native_mate_converters/image_converter.cc',
'atom/common/native_mate_converters/image_converter.h',
'atom/common/native_mate_converters/string16_converter.h',
'atom/common/native_mate_converters/v8_value_converter.cc',
'atom/common/native_mate_converters/v8_value_converter.h',
'atom/common/native_mate_converters/value_converter.cc',
'atom/common/native_mate_converters/value_converter.h',
'atom/common/node_bindings.cc',
'atom/common/node_bindings.h',
'atom/common/node_bindings_linux.cc',
'atom/common/node_bindings_linux.h',
'atom/common/node_bindings_mac.cc',
'atom/common/node_bindings_mac.h',
'atom/common/node_bindings_win.cc',
'atom/common/node_bindings_win.h',
'atom/common/node_includes.h',
'atom/common/options_switches.cc',
'atom/common/options_switches.h',
'atom/common/platform_util.h',
'atom/common/platform_util_linux.cc',
'atom/common/platform_util_mac.mm',
'atom/common/platform_util_win.cc',
'atom/renderer/api/atom_api_renderer_ipc.cc',
'atom/renderer/api/atom_api_spell_check_client.cc',
'atom/renderer/api/atom_api_spell_check_client.h',
'atom/renderer/api/atom_api_web_frame.cc',
'atom/renderer/api/atom_api_web_frame.h',
'atom/renderer/atom_render_view_observer.cc',
'atom/renderer/atom_render_view_observer.h',
'atom/renderer/atom_renderer_client.cc',
'atom/renderer/atom_renderer_client.h',
'atom/renderer/guest_view_container.cc',
'atom/renderer/guest_view_container.h',
'chromium_src/chrome/browser/browser_process.cc',
'chromium_src/chrome/browser/browser_process.h',
'chromium_src/chrome/browser/chrome_notification_types.h',
'chromium_src/chrome/browser/extensions/global_shortcut_listener.cc',
'chromium_src/chrome/browser/extensions/global_shortcut_listener.h',
'chromium_src/chrome/browser/extensions/global_shortcut_listener_mac.mm',
'chromium_src/chrome/browser/extensions/global_shortcut_listener_mac.h',
'chromium_src/chrome/browser/extensions/global_shortcut_listener_x11.cc',
'chromium_src/chrome/browser/extensions/global_shortcut_listener_x11.h',
'chromium_src/chrome/browser/extensions/global_shortcut_listener_win.cc',
'chromium_src/chrome/browser/extensions/global_shortcut_listener_win.h',
'chromium_src/chrome/browser/printing/print_job.cc',
'chromium_src/chrome/browser/printing/print_job.h',
'chromium_src/chrome/browser/printing/print_job_manager.cc',
'chromium_src/chrome/browser/printing/print_job_manager.h',
'chromium_src/chrome/browser/printing/print_job_worker.cc',
'chromium_src/chrome/browser/printing/print_job_worker.h',
'chromium_src/chrome/browser/printing/print_job_worker_owner.cc',
'chromium_src/chrome/browser/printing/print_job_worker_owner.h',
'chromium_src/chrome/browser/printing/print_view_manager_base.cc',
'chromium_src/chrome/browser/printing/print_view_manager_base.h',
'chromium_src/chrome/browser/printing/print_view_manager_basic.cc',
'chromium_src/chrome/browser/printing/print_view_manager_basic.h',
'chromium_src/chrome/browser/printing/print_view_manager_observer.h',
'chromium_src/chrome/browser/printing/printer_query.cc',
'chromium_src/chrome/browser/printing/printer_query.h',
'chromium_src/chrome/browser/printing/printing_message_filter.cc',
'chromium_src/chrome/browser/printing/printing_message_filter.h',
'chromium_src/chrome/browser/speech/tts_controller.h',
'chromium_src/chrome/browser/speech/tts_controller_impl.cc',
'chromium_src/chrome/browser/speech/tts_controller_impl.h',
'chromium_src/chrome/browser/speech/tts_linux.cc',
'chromium_src/chrome/browser/speech/tts_mac.mm',
'chromium_src/chrome/browser/speech/tts_message_filter.cc',
'chromium_src/chrome/browser/speech/tts_message_filter.h',
'chromium_src/chrome/browser/speech/tts_platform.cc',
'chromium_src/chrome/browser/speech/tts_platform.h',
'chromium_src/chrome/browser/speech/tts_win.cc',
'chromium_src/chrome/browser/ui/browser_dialogs.h',
'chromium_src/chrome/browser/ui/cocoa/color_chooser_mac.mm',
'chromium_src/chrome/browser/ui/views/color_chooser_aura.cc',
'chromium_src/chrome/browser/ui/views/color_chooser_aura.h',
'chromium_src/chrome/browser/ui/views/frame/global_menu_bar_registrar_x11.cc',
'chromium_src/chrome/browser/ui/views/frame/global_menu_bar_registrar_x11.h',
'chromium_src/chrome/common/print_messages.cc',
'chromium_src/chrome/common/print_messages.h',
'chromium_src/chrome/common/tts_messages.h',
'chromium_src/chrome/common/tts_utterance_request.cc',
'chromium_src/chrome/common/tts_utterance_request.h',
'chromium_src/chrome/renderer/printing/print_web_view_helper.cc',
'chromium_src/chrome/renderer/printing/print_web_view_helper_linux.cc',
'chromium_src/chrome/renderer/printing/print_web_view_helper_mac.mm',
'chromium_src/chrome/renderer/printing/print_web_view_helper_pdf_win.cc',
'chromium_src/chrome/renderer/printing/print_web_view_helper.h',
'chromium_src/chrome/renderer/spellchecker/spellcheck_worditerator.cc',
'chromium_src/chrome/renderer/spellchecker/spellcheck_worditerator.h',
'chromium_src/chrome/renderer/tts_dispatcher.cc',
'chromium_src/chrome/renderer/tts_dispatcher.h',
'chromium_src/library_loaders/libgio_loader.cc',
'chromium_src/library_loaders/libgio.h',
'chromium_src/library_loaders/libspeechd_loader.cc',
'chromium_src/library_loaders/libspeechd.h',
'<@(native_mate_files)',
'<(SHARED_INTERMEDIATE_DIR)/atom_natives.h',
],
'lib_sources_win': [
'chromium_src/chrome/browser/ui/views/color_chooser_dialog.cc',
'chromium_src/chrome/browser/ui/views/color_chooser_dialog.h',
'chromium_src/chrome/browser/ui/views/color_chooser_win.cc',
],
'framework_sources': [
'atom/app/atom_library_main.h',
'atom/app/atom_library_main.mm',
],
'locales': [
'am', 'ar', 'bg', 'bn', 'ca', 'cs', 'da', 'de', 'el', 'en-GB',
'en-US', 'es-419', 'es', 'et', 'fa', 'fi', 'fil', 'fr', 'gu', 'he',
'hi', 'hr', 'hu', 'id', 'it', 'ja', 'kn', 'ko', 'lt', 'lv',
'ml', 'mr', 'ms', 'nb', 'nl', 'pl', 'pt-BR', 'pt-PT', 'ro', 'ru',
'sk', 'sl', 'sr', 'sv', 'sw', 'ta', 'te', 'th', 'tr', 'uk',
'vi', 'zh-CN', 'zh-TW',
],
'project_name%': 'electron',
'product_name%': 'Electron',
'company_name%': 'GitHub, Inc',
'company_abbr%': 'github',
'version%': '0.27.1',
'atom_source_root': '<!(["python", "tools/atom_source_root.py"])',
'conditions': [
['OS=="win"', {
'app_sources': [
'atom/browser/resources/win/resource.h',
'atom/browser/resources/win/atom.ico',
'atom/browser/resources/win/atom.rc',
'<(libchromiumcontent_src_dir)/content/app/startup_helper_win.cc',
],
}], # OS=="win"
['OS=="mac"', {
'apply_locales_cmd': ['python', 'tools/mac/apply_locales.py'],
}], # OS=="mac"
],
},
'includes': [
'filenames.gypi',
'vendor/native_mate/native_mate_files.gypi',
],
'target_defaults': {
'defines': [
'ATOM_PRODUCT_NAME="<(product_name)"',
'ATOM_PROJECT_NAME="<(project_name)"',
],
'mac_framework_dirs': [
'<(atom_source_root)/external_binaries',
],
'includes': [
# Rules for excluding e.g. foo_win.cc from the build on non-Windows.
'filename_rules.gypi',
],
'configurations': {
'Debug': {
'defines': [ 'DEBUG' ],
'cflags': [ '-g', '-O0' ],
},
},
},
'targets': [
{
@@ -421,6 +47,7 @@
'<(project_name)_helper',
],
'xcode_settings': {
'ATOM_BUNDLE_ID': 'com.<(company_abbr).<(project_name)',
'INFOPLIST_FILE': 'atom/browser/resources/mac/Info.plist',
'LD_RUNPATH_SEARCH_PATHS': [
'@executable_path/../Frameworks',
@@ -470,6 +97,7 @@
{
'postbuild_name': 'Make Empty Localizations',
'variables': {
'apply_locales_cmd': ['python', 'tools/mac/apply_locales.py'],
'locale_dirs': [
'>!@(<(apply_locales_cmd) -d ZZLOCALE.lproj <(locales))',
],
@@ -488,23 +116,37 @@
['OS=="win"', {
'copies': [
{
'variables': {
'conditions': [
['libchromiumcontent_component', {
'copied_libraries': [
'<@(libchromiumcontent_shared_libraries)',
'<@(libchromiumcontent_shared_v8_libraries)',
],
}, {
'copied_libraries': [
'<(libchromiumcontent_dir)/pdf.dll',
],
}],
],
},
'destination': '<(PRODUCT_DIR)',
'files': [
'<(libchromiumcontent_library_dir)/chromiumcontent.dll',
'<(libchromiumcontent_library_dir)/ffmpegsumo.dll',
'<(libchromiumcontent_library_dir)/libEGL.dll',
'<(libchromiumcontent_library_dir)/libGLESv2.dll',
'<(libchromiumcontent_resources_dir)/icudtl.dat',
'<(libchromiumcontent_resources_dir)/content_resources_200_percent.pak',
'<(libchromiumcontent_resources_dir)/content_shell.pak',
'<(libchromiumcontent_resources_dir)/ui_resources_200_percent.pak',
'<(libchromiumcontent_resources_dir)/natives_blob.bin',
'<(libchromiumcontent_resources_dir)/snapshot_blob.bin',
'external_binaries/d3dcompiler_46.dll',
'<@(copied_libraries)',
'<(libchromiumcontent_dir)/ffmpegsumo.dll',
'<(libchromiumcontent_dir)/libEGL.dll',
'<(libchromiumcontent_dir)/libGLESv2.dll',
'<(libchromiumcontent_dir)/icudtl.dat',
'<(libchromiumcontent_dir)/content_resources_200_percent.pak',
'<(libchromiumcontent_dir)/content_shell.pak',
'<(libchromiumcontent_dir)/ui_resources_200_percent.pak',
'<(libchromiumcontent_dir)/natives_blob.bin',
'<(libchromiumcontent_dir)/snapshot_blob.bin',
'external_binaries/d3dcompiler_47.dll',
'external_binaries/xinput1_3.dll',
'external_binaries/msvcp120.dll',
'external_binaries/msvcr120.dll',
'external_binaries/vccorlib120.dll',
'external_binaries/xinput1_3.dll',
],
},
{
@@ -518,14 +160,29 @@
['OS=="linux"', {
'copies': [
{
'variables': {
'conditions': [
['libchromiumcontent_component', {
'copied_libraries': [
'<(PRODUCT_DIR)/lib/libnode.so',
'<@(libchromiumcontent_shared_libraries)',
'<@(libchromiumcontent_shared_v8_libraries)',
],
}, {
'copied_libraries': [
'<(PRODUCT_DIR)/lib/libnode.so',
],
}],
],
},
'destination': '<(PRODUCT_DIR)',
'files': [
'<(libchromiumcontent_library_dir)/libchromiumcontent.so',
'<(libchromiumcontent_library_dir)/libffmpegsumo.so',
'<(libchromiumcontent_resources_dir)/icudtl.dat',
'<(libchromiumcontent_resources_dir)/content_shell.pak',
'<(libchromiumcontent_resources_dir)/natives_blob.bin',
'<(libchromiumcontent_resources_dir)/snapshot_blob.bin',
'<@(copied_libraries)',
'<(libchromiumcontent_dir)/libffmpegsumo.so',
'<(libchromiumcontent_dir)/icudtl.dat',
'<(libchromiumcontent_dir)/content_shell.pak',
'<(libchromiumcontent_dir)/natives_blob.bin',
'<(libchromiumcontent_dir)/snapshot_blob.bin',
],
},
{
@@ -544,10 +201,9 @@
'dependencies': [
'atom_coffee2c',
'vendor/brightray/brightray.gyp:brightray',
'vendor/node/node.gyp:node_lib',
'vendor/node/node.gyp:node',
],
'defines': [
'PRODUCT_NAME="<(product_name)"',
# This is defined in skia/skia_common.gypi.
'SK_SUPPORT_LEGACY_GETTOPDEVICE',
# Disable warnings for g_settings_list_schemas.
@@ -555,6 +211,8 @@
# Defined in Chromium but not exposed in its gyp file.
'V8_USE_EXTERNAL_STARTUP_DATA',
'ENABLE_PLUGINS',
# Needed by Node.
'NODE_WANT_INTERNALS=1',
],
'sources': [
'<@(lib_sources)',
@@ -571,11 +229,11 @@
'vendor/node/deps/http_parser',
'vendor/node/deps/uv/include',
# The `node.h` is using `#include"v8.h"`.
'vendor/brightray/vendor/download/libchromiumcontent/src/v8/include',
'<(libchromiumcontent_src_dir)/v8/include',
# The `node.h` is using `#include"ares.h"`.
'vendor/node/deps/cares/include',
# The `third_party/WebKit/Source/platform/weborigin/SchemeRegistry.h` is using `platform/PlatformExport.h`.
'vendor/brightray/vendor/download/libchromiumcontent/src/third_party/WebKit/Source',
'<(libchromiumcontent_src_dir)/third_party/WebKit/Source',
],
'direct_dependent_settings': {
'include_dirs': [
@@ -586,6 +244,11 @@
'vendor/brightray/brightray.gyp:brightray',
],
'conditions': [
['libchromiumcontent_component', {
'link_settings': {
'libraries': [ '<@(libchromiumcontent_v8_libraries)' ],
},
}],
['OS=="win"', {
'sources': [
'<@(lib_sources_win)',
@@ -599,6 +262,13 @@
],
},
'dependencies': [
# Node is built as static_library on Windows, so we also need to
# include its dependencies here.
'vendor/node/deps/cares/cares.gyp:cares',
'vendor/node/deps/http_parser/http_parser.gyp:http_parser',
'vendor/node/deps/uv/uv.gyp:libuv',
'vendor/node/deps/zlib/zlib.gyp:zlib',
# Build with breakpad support.
'vendor/breakpad/breakpad.gyp:breakpad_handler',
'vendor/breakpad/breakpad.gyp:breakpad_sender',
],
@@ -620,15 +290,13 @@
],
},
# Required settings of using breakpad.
'include_dirs': [
'vendor/breakpad/src',
],
'cflags': [
'<!@(pkg-config --cflags dbus-1)',
'-Wno-deprecated-register',
'cflags_cc': [
'-Wno-empty-body',
'-Wno-reserved-user-defined-literal',
],
'include_dirs': [
'vendor/breakpad/src',
],
'dependencies': [
'vendor/breakpad/breakpad.gyp:breakpad_client',
],
@@ -686,138 +354,6 @@
}
],
}, # target atom_coffee2c
{
'target_name': '<(project_name)_dump_symbols',
'type': 'none',
'dependencies': [
'<(project_name)',
],
'conditions': [
['OS=="mac"', {
'dependencies': [
'vendor/breakpad/breakpad.gyp:dump_syms',
],
'actions': [
{
'action_name': 'Dump Symbols',
'inputs': [
'<(PRODUCT_DIR)/<(product_name).app/Contents/MacOS/<(product_name)',
],
'outputs': [
'<(PRODUCT_DIR)/Atom-Shell.breakpad.syms',
],
'action': [
'python',
'tools/posix/generate_breakpad_symbols.py',
'--build-dir=<(PRODUCT_DIR)',
'--binary=<(PRODUCT_DIR)/<(product_name).app/Contents/MacOS/<(product_name)',
'--symbols-dir=<(PRODUCT_DIR)/Atom-Shell.breakpad.syms',
'--libchromiumcontent-dir=<(libchromiumcontent_library_dir)',
'--clear',
'--jobs=16',
],
},
],
}], # OS=="mac"
['OS=="win"', {
'actions': [
{
'action_name': 'Dump Symbols',
'inputs': [
'<(PRODUCT_DIR)/<(project_name).exe',
],
'outputs': [
'<(PRODUCT_DIR)/Atom-Shell.breakpad.syms',
],
'action': [
'python',
'tools/win/generate_breakpad_symbols.py',
'--symbols-dir=<(PRODUCT_DIR)/Atom-Shell.breakpad.syms',
'--jobs=16',
'<(PRODUCT_DIR)',
'<(libchromiumcontent_library_dir)',
],
},
],
}], # OS=="win"
['OS=="linux"', {
'dependencies': [
'vendor/breakpad/breakpad.gyp:dump_syms',
],
'actions': [
{
'action_name': 'Dump Symbols',
'inputs': [
'<(PRODUCT_DIR)/<(project_name)',
],
'outputs': [
'<(PRODUCT_DIR)/Atom-Shell.breakpad.syms',
],
'action': [
'python',
'tools/posix/generate_breakpad_symbols.py',
'--build-dir=<(PRODUCT_DIR)',
'--binary=<(PRODUCT_DIR)/<(project_name)',
'--symbols-dir=<(PRODUCT_DIR)/Atom-Shell.breakpad.syms',
'--libchromiumcontent-dir=<(libchromiumcontent_library_dir)',
'--clear',
'--jobs=16',
],
},
{
'action_name': 'Strip Binary',
'inputs': [
'<(PRODUCT_DIR)/libchromiumcontent.so',
'<(PRODUCT_DIR)/libffmpegsumo.so',
'<(PRODUCT_DIR)/<(project_name)',
# Add the syms folder as input would force this action to run
# after the 'Dump Symbols' action. And since it is a folder,
# it would be ignored by the 'strip' command.
'<(PRODUCT_DIR)/Atom-Shell.breakpad.syms',
],
'outputs': [
# Gyp action requires a output file, add a fake one here.
'<(PRODUCT_DIR)/dummy_file',
],
'action': [
'tools/posix/strip.sh',
'<@(_inputs)',
],
},
],
}], # OS=="linux"
],
}, # target <(project_name>_dump_symbols
{
'target_name': 'copy_chromedriver',
'type': 'none',
'actions': [
{
'action_name': 'Copy ChromeDriver Binary',
'variables': {
'conditions': [
['OS=="win"', {
'chromedriver_binary': 'chromedriver.exe',
},{
'chromedriver_binary': 'chromedriver',
}],
],
},
'inputs': [
'<(libchromiumcontent_library_dir)/<(chromedriver_binary)',
],
'outputs': [
'<(PRODUCT_DIR)/<(chromedriver_binary)',
],
'action': [
'python',
'tools/copy_binary.py',
'<@(_inputs)',
'<@(_outputs)',
],
}
],
}, # copy_chromedriver
],
'conditions': [
['OS=="mac"', {
@@ -835,10 +371,7 @@
'include_dirs': [
'.',
'vendor',
'<(libchromiumcontent_include_dir)',
],
'defines': [
'PRODUCT_NAME="<(product_name)"',
'<(libchromiumcontent_src_dir)',
],
'export_dependent_settings': [
'<(project_name)_lib',
@@ -855,16 +388,14 @@
'mac_bundle': 1,
'mac_bundle_resources': [
'atom/common/resources/mac/MainMenu.xib',
'<(libchromiumcontent_resources_dir)/content_shell.pak',
'<(libchromiumcontent_resources_dir)/icudtl.dat',
'<(libchromiumcontent_resources_dir)/natives_blob.bin',
'<(libchromiumcontent_resources_dir)/snapshot_blob.bin',
'<(libchromiumcontent_dir)/content_shell.pak',
'<(libchromiumcontent_dir)/icudtl.dat',
'<(libchromiumcontent_dir)/natives_blob.bin',
'<(libchromiumcontent_dir)/snapshot_blob.bin',
],
'xcode_settings': {
'ATOM_BUNDLE_ID': 'com.<(company_abbr).<(project_name).framework',
'INFOPLIST_FILE': 'atom/common/resources/mac/Info.plist',
'LIBRARY_SEARCH_PATHS': [
'<(libchromiumcontent_library_dir)',
],
'LD_DYLIB_INSTALL_NAME': '@rpath/<(product_name) Framework.framework/<(product_name) Framework',
'LD_RUNPATH_SEARCH_PATHS': [
'@loader_path/Libraries',
@@ -875,10 +406,25 @@
},
'copies': [
{
'variables': {
'conditions': [
['libchromiumcontent_component', {
'copied_libraries': [
'<(PRODUCT_DIR)/libnode.dylib',
'<@(libchromiumcontent_shared_libraries)',
'<@(libchromiumcontent_shared_v8_libraries)',
],
}, {
'copied_libraries': [
'<(PRODUCT_DIR)/libnode.dylib',
],
}],
],
},
'destination': '<(PRODUCT_DIR)/<(product_name) Framework.framework/Versions/A/Libraries',
'files': [
'<(libchromiumcontent_library_dir)/ffmpegsumo.so',
'<(libchromiumcontent_library_dir)/libchromiumcontent.dylib',
'<@(copied_libraries)',
'<(libchromiumcontent_dir)/ffmpegsumo.so',
],
},
{
@@ -890,6 +436,16 @@
},
],
'postbuilds': [
{
'postbuild_name': 'Fix path of libnode',
'action': [
'install_name_tool',
'-change',
'/usr/local/lib/libnode.dylib',
'@rpath/libnode.dylib',
'${BUILT_PRODUCTS_DIR}/<(product_name) Framework.framework/Versions/A/<(product_name) Framework',
],
},
{
'postbuild_name': 'Add symlinks for framework subdirectories',
'action': [
@@ -916,6 +472,7 @@
],
'mac_bundle': 1,
'xcode_settings': {
'ATOM_BUNDLE_ID': 'com.<(company_abbr).<(project_name).helper',
'INFOPLIST_FILE': 'atom/renderer/resources/mac/Info.plist',
'LD_RUNPATH_SEARCH_PATHS': [
'@executable_path/../../..',
@@ -949,37 +506,5 @@
},
],
}], # OS!="mac"
['OS=="win"', {
'targets': [
{
'target_name': 'generate_node_lib',
'type': 'none',
'dependencies': [
'<(project_name)',
],
'actions': [
{
'action_name': 'Create node.lib',
'inputs': [
'<(PRODUCT_DIR)/<(project_name).lib',
'<(libchromiumcontent_library_dir)/chromiumcontent.dll.lib',
],
'outputs': [
'<(PRODUCT_DIR)/node.lib',
],
'action': [
'lib.exe',
'/nologo',
# We can't use <(_outputs) here because that escapes the
# backslash in the path, which confuses lib.exe.
'/OUT:<(PRODUCT_DIR)\\node.lib',
'<@(_inputs)',
],
'msvs_cygwin_shell': 0,
},
],
}, # target generate_node_lib
],
}], # OS==win
],
}

View File

@@ -8,9 +8,60 @@
#include <vector>
#include "atom/common/chrome_version.h"
#include "atom/common/options_switches.h"
#include "base/command_line.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "content/public/common/content_constants.h"
#include "content/public/common/pepper_plugin_info.h"
#include "ppapi/shared_impl/ppapi_permissions.h"
namespace atom {
namespace {
content::PepperPluginInfo CreatePepperFlashInfo(const base::FilePath& path,
const std::string& version) {
content::PepperPluginInfo plugin;
plugin.is_out_of_process = true;
plugin.name = content::kFlashPluginName;
plugin.path = path;
plugin.permissions = ppapi::PERMISSION_ALL_BITS;
std::vector<std::string> flash_version_numbers;
base::SplitString(version, '.', &flash_version_numbers);
if (flash_version_numbers.size() < 1)
flash_version_numbers.push_back("11");
// |SplitString()| puts in an empty string given an empty string. :(
else if (flash_version_numbers[0].empty())
flash_version_numbers[0] = "11";
if (flash_version_numbers.size() < 2)
flash_version_numbers.push_back("2");
if (flash_version_numbers.size() < 3)
flash_version_numbers.push_back("999");
if (flash_version_numbers.size() < 4)
flash_version_numbers.push_back("999");
// E.g., "Shockwave Flash 10.2 r154":
plugin.description = plugin.name + " " + flash_version_numbers[0] + "." +
flash_version_numbers[1] + " r" + flash_version_numbers[2];
plugin.version = JoinString(flash_version_numbers, '.');
content::WebPluginMimeType swf_mime_type(
content::kFlashPluginSwfMimeType,
content::kFlashPluginSwfExtension,
content::kFlashPluginSwfDescription);
plugin.mime_types.push_back(swf_mime_type);
content::WebPluginMimeType spl_mime_type(
content::kFlashPluginSplMimeType,
content::kFlashPluginSplExtension,
content::kFlashPluginSplDescription);
plugin.mime_types.push_back(spl_mime_type);
return plugin;
}
} // namespace
AtomContentClient::AtomContentClient() {
}
@@ -27,4 +78,19 @@ void AtomContentClient::AddAdditionalSchemes(
standard_schemes->push_back("chrome-extension");
}
void AtomContentClient::AddPepperPlugins(
std::vector<content::PepperPluginInfo>* plugins) {
auto command_line = base::CommandLine::ForCurrentProcess();
auto flash_path = command_line->GetSwitchValueNative(
switches::kPpapiFlashPath);
if (flash_path.empty())
return;
auto flash_version = command_line->GetSwitchValueASCII(
switches::kPpapiFlashVersion);
plugins->push_back(
CreatePepperFlashInfo(base::FilePath(flash_path), flash_version));
}
} // namespace atom

View File

@@ -23,6 +23,8 @@ class AtomContentClient : public brightray::ContentClient {
void AddAdditionalSchemes(
std::vector<std::string>* standard_schemes,
std::vector<std::string>* savable_schemes) override;
void AddPepperPlugins(
std::vector<content::PepperPluginInfo>* plugins) override;
private:
DISALLOW_COPY_AND_ASSIGN(AtomContentClient);

View File

@@ -4,6 +4,7 @@
#include "atom/app/atom_library_main.h"
#include "atom/app/atom_main_args.h"
#include "atom/app/atom_main_delegate.h"
#include "atom/app/node_main.h"
#include "base/at_exit.h"
@@ -18,6 +19,7 @@ int AtomMain(int argc, const char* argv[]) {
content::ContentMainParams params(&delegate);
params.argc = argc;
params.argv = argv;
atom::AtomCommandLine::Init(argc, argv);
return content::ContentMain(params);
}
@@ -27,7 +29,7 @@ int AtomInitializeICUandStartNode(int argc, char *argv[]) {
brightray::MainApplicationBundlePath()
.Append("Contents")
.Append("Frameworks")
.Append(PRODUCT_NAME " Framework.framework"));
.Append(ATOM_PRODUCT_NAME " Framework.framework"));
base::i18n::InitializeICU();
return atom::NodeMain(argc, argv);
}

View File

@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "atom/app/atom_main.h"
#include "atom/app/atom_main_args.h"
#include <stdlib.h>
#include <string.h>
@@ -95,43 +96,44 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, wchar_t* cmd, int) {
freopen_s(&dontcare, "CON", "r", stdin);
}
std::string node_indicator, crash_service_indicator;
if (env->GetVar("ATOM_SHELL_INTERNAL_RUN_AS_NODE", &node_indicator) &&
node_indicator == "1") {
// 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,
// 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,
NULL,
0,
argv[i],
size,
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);
}
if (result == 0) {
// This should never happen.
fprintf(stderr, "Could not convert arguments to utf8.");
exit(1);
}
// Now that conversion is done, we can finally start.
}
std::string node_indicator, crash_service_indicator;
if (env->GetVar("ATOM_SHELL_INTERNAL_RUN_AS_NODE", &node_indicator) &&
node_indicator == "1") {
// Now that argv conversion is done, we can finally start.
base::i18n::InitializeICU();
return atom::NodeMain(argc, argv);
} else if (env->GetVar("ATOM_SHELL_INTERNAL_CRASH_SERVICE",
@@ -153,6 +155,7 @@ 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);
return content::ContentMain(params);
}
@@ -169,6 +172,7 @@ int main(int argc, const char* argv[]) {
content::ContentMainParams params(&delegate);
params.argc = argc;
params.argv = argv;
atom::AtomCommandLine::Init(argc, argv);
return content::ContentMain(params);
}

View File

@@ -0,0 +1,22 @@
// 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/app/atom_main_args.h"
#include "vendor/node/deps/uv/include/uv.h"
namespace atom {
// static
std::vector<std::string> AtomCommandLine::argv_;
// static
void AtomCommandLine::Init(int argc, const char* const* argv) {
// Hack around with the argv pointer. Used for process.title = "blah"
char** new_argv = uv_setup_args(argc, const_cast<char**>(argv));
for (int i = 0; i < argc; ++i) {
argv_.push_back(new_argv[i]);
}
}
} // namespace atom

29
atom/app/atom_main_args.h Normal file
View File

@@ -0,0 +1,29 @@
// Copyright (c) 2015 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef ATOM_APP_ATOM_MAIN_ARGS_H_
#define ATOM_APP_ATOM_MAIN_ARGS_H_
#include <string>
#include <vector>
#include "base/macros.h"
namespace atom {
// Singleton to remember the original "argc" and "argv".
class AtomCommandLine {
public:
static void Init(int argc, const char* const* argv);
static std::vector<std::string> argv() { return argv_; }
private:
static std::vector<std::string> argv_;
DISALLOW_IMPLICIT_CONSTRUCTORS(AtomCommandLine);
};
} // namespace atom
#endif // ATOM_APP_ATOM_MAIN_ARGS_H_

View File

@@ -10,6 +10,7 @@
#include "atom/browser/atom_browser_client.h"
#include "atom/common/google_api_key.h"
#include "atom/renderer/atom_renderer_client.h"
#include "atom/utility/atom_content_utility_client.h"
#include "base/command_line.h"
#include "base/debug/stack_trace.h"
#include "base/environment.h"
@@ -27,8 +28,8 @@ AtomMainDelegate::~AtomMainDelegate() {
bool AtomMainDelegate::BasicStartupComplete(int* exit_code) {
// Disable logging out to debug.log on Windows
#if defined(OS_WIN)
logging::LoggingSettings settings;
#if defined(OS_WIN)
#if defined(DEBUG)
settings.logging_dest = logging::LOG_TO_ALL;
settings.log_file = L"debug.log";
@@ -36,15 +37,15 @@ bool AtomMainDelegate::BasicStartupComplete(int* exit_code) {
settings.delete_old = logging::DELETE_OLD_LOG_FILE;
#else
settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
#endif
logging::InitLogging(settings);
#endif // defined(DEBUG)
#endif // defined(OS_WIN)
logging::InitLogging(settings);
// Logging with pid and timestamp.
logging::SetLogItems(true, false, true, false);
// Enable convient stack printing.
#if defined(DEBUG) && defined(OS_LINUX)
// Enable convient stack printing.
base::debug::EnableInProcessStackDumping();
#endif
@@ -63,13 +64,14 @@ void AtomMainDelegate::PreSandboxStartup() {
std::string process_type = command_line->GetSwitchValueASCII(
switches::kProcessType);
if (process_type == switches::kUtilityProcess) {
AtomContentUtilityClient::PreSandboxStartup();
}
// Only append arguments for browser process.
if (!process_type.empty())
return;
// Add a flag to mark the start of switches added by atom-shell.
command_line->AppendSwitch("atom-shell-switches-start");
#if defined(OS_WIN)
// Disable the LegacyRenderWidgetHostHWND, it made frameless windows unable
// to move and resize. We may consider enabling it again after upgraded to
@@ -80,13 +82,13 @@ void AtomMainDelegate::PreSandboxStartup() {
// Disable renderer sandbox for most of node's functions.
command_line->AppendSwitch(switches::kNoSandbox);
// Allow file:// URIs to read other file:// URIs by default.
command_line->AppendSwitch(switches::kAllowFileAccessFromFiles);
#if defined(OS_MACOSX)
// Enable AVFoundation.
command_line->AppendSwitch("enable-avfoundation");
#endif
// Add a flag to mark the end of switches added by atom-shell.
command_line->AppendSwitch("atom-shell-switches-end");
}
content::ContentBrowserClient* AtomMainDelegate::CreateContentBrowserClient() {
@@ -100,6 +102,11 @@ content::ContentRendererClient*
return renderer_client_.get();
}
content::ContentUtilityClient* AtomMainDelegate::CreateContentUtilityClient() {
utility_client_.reset(new AtomContentUtilityClient);
return utility_client_.get();
}
scoped_ptr<brightray::ContentClient> AtomMainDelegate::CreateContentClient() {
return scoped_ptr<brightray::ContentClient>(new AtomContentClient).Pass();
}

View File

@@ -21,6 +21,7 @@ class AtomMainDelegate : public brightray::MainDelegate {
void PreSandboxStartup() override;
content::ContentBrowserClient* CreateContentBrowserClient() override;
content::ContentRendererClient* CreateContentRendererClient() override;
content::ContentUtilityClient* CreateContentUtilityClient() override;
// brightray::MainDelegate:
scoped_ptr<brightray::ContentClient> CreateContentClient() override;
@@ -35,6 +36,7 @@ class AtomMainDelegate : public brightray::MainDelegate {
brightray::ContentClient content_client_;
scoped_ptr<content::ContentBrowserClient> browser_client_;
scoped_ptr<content::ContentRendererClient> renderer_client_;
scoped_ptr<content::ContentUtilityClient> utility_client_;
DISALLOW_COPY_AND_ASSIGN(AtomMainDelegate);
};

View File

@@ -6,7 +6,9 @@
#include "base/mac/bundle_locations.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/path_service.h"
#include "brightray/common/application_info.h"
#include "brightray/common/mac/main_application_bundle.h"
#include "content/public/common/content_paths.h"
@@ -19,19 +21,30 @@ base::FilePath GetFrameworksPath() {
.Append("Frameworks");
}
base::FilePath GetHelperAppPath(const base::FilePath& frameworks_path,
const std::string& name) {
return frameworks_path.Append(name + " Helper.app")
.Append("Contents")
.Append("MacOS")
.Append(name + " Helper");
}
} // namespace
void AtomMainDelegate::OverrideFrameworkBundlePath() {
base::mac::SetOverrideFrameworkBundlePath(
GetFrameworksPath().Append(PRODUCT_NAME " Framework.framework"));
GetFrameworksPath().Append(ATOM_PRODUCT_NAME " Framework.framework"));
}
void AtomMainDelegate::OverrideChildProcessPath() {
base::FilePath helper_path =
GetFrameworksPath().Append(PRODUCT_NAME " Helper.app")
.Append("Contents")
.Append("MacOS")
.Append(PRODUCT_NAME " Helper");
base::FilePath frameworks_path = GetFrameworksPath();
base::FilePath helper_path = GetHelperAppPath(frameworks_path,
ATOM_PRODUCT_NAME);
if (!base::PathExists(helper_path))
helper_path = GetHelperAppPath(frameworks_path,
brightray::GetApplicationName());
if (!base::PathExists(helper_path))
LOG(FATAL) << "Unable to find helper app";
PathService::Override(content::CHILD_PROCESS_EXE, helper_path);
}

View File

@@ -26,7 +26,19 @@ int NodeMain(int argc, char *argv[]) {
JavascriptEnvironment gin_env;
node::Environment* env = node::CreateEnvironment(
gin_env.isolate(), gin_env.context(), argc, argv, exec_argc, exec_argv);
gin_env.isolate(), uv_default_loop(), gin_env.context(), argc, argv,
exec_argc, exec_argv);
// Start debugger.
node::node_isolate = gin_env.isolate();
if (node::use_debug_agent)
node::StartDebug(env, node::debug_wait_connect);
node::LoadEnvironment(env);
// Enable debugger.
if (node::use_debug_agent)
node::EnableDebug(env);
bool more;
do {

View File

@@ -7,6 +7,10 @@
#include <string>
#include <vector>
#if defined(OS_WIN)
#include <shlobj.h>
#endif
#include "atom/browser/api/atom_api_menu.h"
#include "atom/browser/atom_browser_context.h"
#include "atom/browser/browser.h"
@@ -25,6 +29,10 @@
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_context_getter.h"
#if defined(OS_WIN)
#include "base/strings/utf_string_conversions.h"
#endif
#include "atom/common/node_includes.h"
using atom::Browser;
@@ -34,7 +42,7 @@ namespace mate {
#if defined(OS_WIN)
template<>
struct Converter<Browser::UserTask> {
static bool FromV8(v8::Isolate* isolate, v8::Handle<v8::Value> val,
static bool FromV8(v8::Isolate* isolate, v8::Local<v8::Value> val,
Browser::UserTask* out) {
mate::Dictionary dict;
if (!ConvertFromV8(isolate, val, &dict))
@@ -200,6 +208,13 @@ void App::SetDesktopName(const std::string& desktop_name) {
#endif
}
void App::SetAppUserModelId(const std::string& app_id) {
#if defined(OS_WIN)
base::string16 app_id_utf16 = base::UTF8ToUTF16(app_id);
SetCurrentProcessExplicitAppUserModelID(app_id_utf16.c_str());
#endif
}
mate::ObjectTemplateBuilder App::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
auto browser = base::Unretained(Browser::Get());
@@ -222,7 +237,8 @@ mate::ObjectTemplateBuilder App::GetObjectTemplateBuilder(
.SetMethod("setPath", &App::SetPath)
.SetMethod("getPath", &App::GetPath)
.SetMethod("resolveProxy", &App::ResolveProxy)
.SetMethod("setDesktopName", &App::SetDesktopName);
.SetMethod("setDesktopName", &App::SetDesktopName)
.SetMethod("setAppUserModelId", &App::SetAppUserModelId);
}
// static
@@ -261,8 +277,8 @@ void DockSetMenu(atom::api::Menu* menu) {
}
#endif
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
v8::Handle<v8::Context> context, void* priv) {
void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
v8::Local<v8::Context> context, void* priv) {
v8::Isolate* isolate = context->GetIsolate();
auto command_line = base::CommandLine::ForCurrentProcess();

View File

@@ -61,6 +61,7 @@ class App : public mate::EventEmitter,
void ResolveProxy(const GURL& url, ResolveProxyCallback callback);
void SetDesktopName(const std::string& desktop_name);
void SetAppUserModelId(const std::string& app_id);
DISALLOW_COPY_AND_ASSIGN(App);
};

View File

@@ -77,8 +77,8 @@ mate::Handle<AutoUpdater> AutoUpdater::Create(v8::Isolate* isolate) {
namespace {
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
v8::Handle<v8::Context> context, void* priv) {
void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
v8::Local<v8::Context> context, void* priv) {
v8::Isolate* isolate = context->GetIsolate();
mate::Dictionary dict(isolate, exports);
dict.Set("autoUpdater", atom::api::AutoUpdater::Create(isolate));

View File

@@ -17,38 +17,24 @@ using content::TracingController;
namespace mate {
template<typename T>
struct Converter<std::set<T> > {
static v8::Handle<v8::Value> ToV8(v8::Isolate* isolate,
const std::set<T>& val) {
v8::Handle<v8::Array> result = v8::Array::New(
isolate, static_cast<int>(val.size()));
typename std::set<T>::const_iterator it;
int i;
for (i = 0, it = val.begin(); it != val.end(); ++it, ++i)
result->Set(i, Converter<T>::ToV8(isolate, *it));
return result;
}
};
template<>
struct Converter<base::debug::CategoryFilter> {
struct Converter<base::trace_event::CategoryFilter> {
static bool FromV8(v8::Isolate* isolate,
v8::Handle<v8::Value> val,
base::debug::CategoryFilter* out) {
v8::Local<v8::Value> val,
base::trace_event::CategoryFilter* out) {
std::string filter;
if (!ConvertFromV8(isolate, val, &filter))
return false;
*out = base::debug::CategoryFilter(filter);
*out = base::trace_event::CategoryFilter(filter);
return true;
}
};
template<>
struct Converter<base::debug::TraceOptions> {
struct Converter<base::trace_event::TraceOptions> {
static bool FromV8(v8::Isolate* isolate,
v8::Handle<v8::Value> val,
base::debug::TraceOptions* out) {
v8::Local<v8::Value> val,
base::trace_event::TraceOptions* out) {
std::string options;
if (!ConvertFromV8(isolate, val, &options))
return false;
@@ -60,8 +46,8 @@ struct Converter<base::debug::TraceOptions> {
namespace {
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
v8::Handle<v8::Context> context, void* priv) {
void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
v8::Local<v8::Context> context, void* priv) {
auto controller = base::Unretained(TracingController::GetInstance());
mate::Dictionary dict(context->GetIsolate(), exports);
dict.SetMethod("getCategories", base::Bind(

View File

@@ -22,7 +22,7 @@ namespace mate {
template<>
struct Converter<file_dialog::Filter> {
static bool FromV8(v8::Isolate* isolate,
v8::Handle<v8::Value> val,
v8::Local<v8::Value> val,
file_dialog::Filter* out) {
mate::Dictionary dict;
if (!ConvertFromV8(isolate, val, &dict))
@@ -52,7 +52,7 @@ void ShowMessageBox(int type,
const std::string& message = texts[1];
const std::string& detail = texts[2];
v8::Handle<v8::Value> peek = args->PeekNext();
v8::Local<v8::Value> peek = args->PeekNext();
atom::MessageBoxCallback callback;
if (mate::Converter<atom::MessageBoxCallback>::FromV8(args->isolate(),
peek,
@@ -72,7 +72,7 @@ void ShowOpenDialog(const std::string& title,
int properties,
atom::NativeWindow* window,
mate::Arguments* args) {
v8::Handle<v8::Value> peek = args->PeekNext();
v8::Local<v8::Value> peek = args->PeekNext();
file_dialog::OpenDialogCallback callback;
if (mate::Converter<file_dialog::OpenDialogCallback>::FromV8(args->isolate(),
peek,
@@ -92,7 +92,7 @@ void ShowSaveDialog(const std::string& title,
const file_dialog::Filters& filters,
atom::NativeWindow* window,
mate::Arguments* args) {
v8::Handle<v8::Value> peek = args->PeekNext();
v8::Local<v8::Value> peek = args->PeekNext();
file_dialog::SaveDialogCallback callback;
if (mate::Converter<file_dialog::SaveDialogCallback>::FromV8(args->isolate(),
peek,
@@ -106,8 +106,8 @@ void ShowSaveDialog(const std::string& title,
}
}
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
v8::Handle<v8::Context> context, void* priv) {
void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
v8::Local<v8::Context> context, void* priv) {
mate::Dictionary dict(context->GetIsolate(), exports);
dict.SetMethod("showMessageBox", &ShowMessageBox);
dict.SetMethod("showErrorBox", &atom::ShowErrorBox);

View File

@@ -86,8 +86,8 @@ mate::Handle<GlobalShortcut> GlobalShortcut::Create(v8::Isolate* isolate) {
namespace {
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
v8::Handle<v8::Context> context, void* priv) {
void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
v8::Local<v8::Context> context, void* priv) {
v8::Isolate* isolate = context->GetIsolate();
mate::Dictionary dict(isolate, exports);
dict.Set("globalShortcut", atom::api::GlobalShortcut::Create(isolate));

View File

@@ -58,7 +58,7 @@ bool Menu::GetAcceleratorForCommandId(int command_id,
v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8::Locker locker(isolate);
v8::HandleScope handle_scope(isolate);
v8::Handle<v8::Value> val = get_accelerator_.Run(command_id);
v8::Local<v8::Value> val = get_accelerator_.Run(command_id);
return mate::ConvertFromV8(isolate, val, accelerator);
}
@@ -150,7 +150,7 @@ bool Menu::IsVisibleAt(int index) const {
// static
void Menu::BuildPrototype(v8::Isolate* isolate,
v8::Handle<v8::ObjectTemplate> prototype) {
v8::Local<v8::ObjectTemplate> prototype) {
mate::ObjectTemplateBuilder(isolate, prototype)
.SetMethod("insertItem", &Menu::InsertItemAt)
.SetMethod("insertCheckItem", &Menu::InsertCheckItemAt)
@@ -180,14 +180,14 @@ void Menu::BuildPrototype(v8::Isolate* isolate,
namespace {
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
v8::Handle<v8::Context> context, void* priv) {
void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
v8::Local<v8::Context> context, void* priv) {
using atom::api::Menu;
v8::Isolate* isolate = context->GetIsolate();
v8::Local<v8::Function> constructor = mate::CreateConstructor<Menu>(
isolate, "Menu", base::Bind(&Menu::Create));
mate::Dictionary dict(isolate, exports);
dict.Set("Menu", static_cast<v8::Handle<v8::Value>>(constructor));
dict.Set("Menu", static_cast<v8::Local<v8::Value>>(constructor));
#if defined(OS_MACOSX)
dict.SetMethod("setApplicationMenu", &Menu::SetApplicationMenu);
dict.SetMethod("sendActionToFirstResponder",

View File

@@ -23,7 +23,7 @@ class Menu : public mate::Wrappable,
static mate::Wrappable* Create();
static void BuildPrototype(v8::Isolate* isolate,
v8::Handle<v8::ObjectTemplate> prototype);
v8::Local<v8::ObjectTemplate> prototype);
#if defined(OS_MACOSX)
// Set the global menubar.
@@ -88,7 +88,7 @@ class Menu : public mate::Wrappable,
base::Callback<bool(int)> is_checked_;
base::Callback<bool(int)> is_enabled_;
base::Callback<bool(int)> is_visible_;
base::Callback<v8::Handle<v8::Value>(int)> get_accelerator_;
base::Callback<v8::Local<v8::Value>(int)> get_accelerator_;
base::Callback<void(int)> execute_command_;
base::Callback<void()> menu_will_show_;

View File

@@ -4,6 +4,7 @@
#include "atom/browser/api/atom_api_power_monitor.h"
#include "atom/browser/browser.h"
#include "base/power_monitor/power_monitor.h"
#include "base/power_monitor/power_monitor_device_source.h"
#include "native_mate/dictionary.h"
@@ -38,8 +39,14 @@ void PowerMonitor::OnResume() {
}
// static
mate::Handle<PowerMonitor> PowerMonitor::Create(v8::Isolate* isolate) {
return CreateHandle(isolate, new PowerMonitor);
v8::Local<v8::Value> PowerMonitor::Create(v8::Isolate* isolate) {
if (!Browser::Get()->is_ready()) {
node::ThrowError("Cannot initialize \"power-monitor\" module"
"before app is ready");
return v8::Null(isolate);
}
return CreateHandle(isolate, new PowerMonitor).ToV8();
}
} // namespace api
@@ -49,17 +56,16 @@ mate::Handle<PowerMonitor> PowerMonitor::Create(v8::Isolate* isolate) {
namespace {
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
v8::Handle<v8::Context> context, void* priv) {
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
using atom::api::PowerMonitor;
v8::Isolate* isolate = context->GetIsolate();
mate::Handle<PowerMonitor> power_monitor = PowerMonitor::Create(isolate);
mate::Dictionary dict(isolate, exports);
dict.Set("powerMonitor", power_monitor);
dict.Set("powerMonitor", PowerMonitor::Create(isolate));
}
} // namespace

View File

@@ -17,7 +17,7 @@ namespace api {
class PowerMonitor : public mate::EventEmitter,
public base::PowerObserver {
public:
static mate::Handle<PowerMonitor> Create(v8::Isolate* isolate);
static v8::Local<v8::Value> Create(v8::Isolate* isolate);
protected:
PowerMonitor();

View File

@@ -21,7 +21,7 @@ namespace mate {
template<>
struct Converter<const net::URLRequest*> {
static v8::Handle<v8::Value> ToV8(v8::Isolate* isolate,
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
const net::URLRequest* val) {
return mate::ObjectTemplateBuilder(isolate)
.SetValue("method", val->method())
@@ -42,6 +42,14 @@ namespace {
typedef net::URLRequestJobFactory::ProtocolHandler ProtocolHandler;
scoped_refptr<base::RefCountedBytes> BufferToRefCountedBytes(
v8::Local<v8::Value> buf) {
scoped_refptr<base::RefCountedBytes> data(new base::RefCountedBytes);
auto start = reinterpret_cast<const unsigned char*>(node::Buffer::Data(buf));
data->data().assign(start, start + node::Buffer::Length(buf));
return data;
}
class CustomProtocolRequestJob : public AdapterRequestJob {
public:
CustomProtocolRequestJob(Protocol* registry,
@@ -63,7 +71,7 @@ class CustomProtocolRequestJob : public AdapterRequestJob {
// Call the JS handler.
Protocol::JsProtocolHandler callback =
registry_->GetProtocolHandler(request()->url().scheme());
v8::Handle<v8::Value> result = callback.Run(request());
v8::Local<v8::Value> result = callback.Run(request());
// Determine the type of the job we are going to create.
if (result->IsString()) {
@@ -73,7 +81,7 @@ class CustomProtocolRequestJob : public AdapterRequestJob {
GetWeakPtr(), "text/plain", "UTF-8", data));
return;
} else if (result->IsObject()) {
v8::Handle<v8::Object> obj = result->ToObject();
v8::Local<v8::Object> obj = result->ToObject();
mate::Dictionary dict(isolate, obj);
std::string name = mate::V8ToString(obj->GetConstructorName());
if (name == "RequestStringJob") {
@@ -86,6 +94,18 @@ class CustomProtocolRequestJob : public AdapterRequestJob {
base::Bind(&AdapterRequestJob::CreateStringJobAndStart,
GetWeakPtr(), mime_type, charset, data));
return;
} else if (name == "RequestBufferJob") {
std::string mime_type, encoding;
v8::Local<v8::Value> buffer;
dict.Get("mimeType", &mime_type);
dict.Get("encoding", &encoding);
dict.Get("data", &buffer);
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&AdapterRequestJob::CreateBufferJobAndStart,
GetWeakPtr(), mime_type, encoding,
BufferToRefCountedBytes(buffer)));
return;
} else if (name == "RequestFileJob") {
base::FilePath path;
dict.Get("path", &path);
@@ -94,6 +114,15 @@ class CustomProtocolRequestJob : public AdapterRequestJob {
base::Bind(&AdapterRequestJob::CreateFileJobAndStart,
GetWeakPtr(), path));
return;
} else if (name == "RequestErrorJob") {
// Default value net::ERR_NOT_IMPLEMENTED
int error = -11;
dict.Get("error", &error);
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&AdapterRequestJob::CreateErrorJobAndStart,
GetWeakPtr(), error));
return;
}
}
@@ -319,8 +348,8 @@ mate::Handle<Protocol> Protocol::Create(v8::Isolate* isolate) {
namespace {
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
v8::Handle<v8::Context> context, void* priv) {
void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
v8::Local<v8::Context> context, void* priv) {
v8::Isolate* isolate = context->GetIsolate();
mate::Dictionary dict(isolate, exports);
dict.Set("protocol", atom::api::Protocol::Create(isolate));

View File

@@ -24,7 +24,7 @@ namespace api {
class Protocol : public mate::EventEmitter {
public:
typedef base::Callback<v8::Handle<v8::Value>(const net::URLRequest*)>
typedef base::Callback<v8::Local<v8::Value>(const net::URLRequest*)>
JsProtocolHandler;
static mate::Handle<Protocol> Create(v8::Isolate* isolate);

View File

@@ -48,6 +48,7 @@ std::vector<std::string> MetricsToArray(uint32_t metrics) {
} // namespace
Screen::Screen(gfx::Screen* screen) : screen_(screen) {
displays_ = screen_->GetAllDisplays();
screen_->AddObserver(this);
}
@@ -64,11 +65,6 @@ gfx::Display Screen::GetPrimaryDisplay() {
}
std::vector<gfx::Display> Screen::GetAllDisplays() {
// The Screen::GetAllDisplays doesn't update when there is display added or
// removed, so we have to manually maintain the displays_ to make it up to
// date.
if (displays_.size() == 0)
displays_ = screen_->GetAllDisplays();
return displays_;
}
@@ -115,18 +111,16 @@ mate::ObjectTemplateBuilder Screen::GetObjectTemplateBuilder(
}
// static
v8::Handle<v8::Value> Screen::Create(v8::Isolate* isolate) {
v8::Local<v8::Value> Screen::Create(v8::Isolate* isolate) {
if (!Browser::Get()->is_ready()) {
isolate->ThrowException(v8::Exception::Error(mate::StringToV8(
isolate, "Can not initialize \"screen\" module before app is ready")));
return v8::Undefined(isolate);
node::ThrowError("Cannot initialize \"screen\" module before app is ready");
return v8::Null(isolate);
}
gfx::Screen* screen = gfx::Screen::GetNativeScreen();
if (!screen) {
isolate->ThrowException(v8::Exception::Error(mate::StringToV8(
isolate, "Failed to get screen information")));
return v8::Undefined(isolate);
node::ThrowError("Failed to get screen information");
return v8::Null(isolate);
}
return mate::CreateHandle(isolate, new Screen(screen)).ToV8();
@@ -138,8 +132,8 @@ v8::Handle<v8::Value> Screen::Create(v8::Isolate* isolate) {
namespace {
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
v8::Handle<v8::Context> context, void* priv) {
void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
v8::Local<v8::Context> context, void* priv) {
mate::Dictionary dict(context->GetIsolate(), exports);
dict.Set("screen", atom::api::Screen::Create(context->GetIsolate()));
}

View File

@@ -24,7 +24,7 @@ namespace api {
class Screen : public mate::EventEmitter,
public gfx::DisplayObserver {
public:
static v8::Handle<v8::Value> Create(v8::Isolate* isolate);
static v8::Local<v8::Value> Create(v8::Isolate* isolate);
protected:
explicit Screen(gfx::Screen* screen);

View File

@@ -7,7 +7,9 @@
#include <string>
#include "atom/browser/api/atom_api_menu.h"
#include "atom/browser/browser.h"
#include "atom/browser/ui/tray_icon.h"
#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 "native_mate/constructor.h"
@@ -31,11 +33,15 @@ Tray::~Tray() {
// static
mate::Wrappable* Tray::New(const gfx::Image& image) {
if (!Browser::Get()->is_ready()) {
node::ThrowError("Cannot create Tray before app is ready");
return nullptr;
}
return new Tray(image);
}
void Tray::OnClicked() {
Emit("clicked");
void Tray::OnClicked(const gfx::Rect& bounds) {
Emit("clicked", bounds);
}
void Tray::OnDoubleClicked() {
@@ -122,7 +128,7 @@ bool Tray::CheckTrayLife(mate::Arguments* args) {
// static
void Tray::BuildPrototype(v8::Isolate* isolate,
v8::Handle<v8::ObjectTemplate> prototype) {
v8::Local<v8::ObjectTemplate> prototype) {
mate::ObjectTemplateBuilder(isolate, prototype)
.SetMethod("destroy", &Tray::Destroy)
.SetMethod("setImage", &Tray::SetImage)
@@ -141,14 +147,14 @@ void Tray::BuildPrototype(v8::Isolate* isolate,
namespace {
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
v8::Handle<v8::Context> context, void* priv) {
void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
v8::Local<v8::Context> context, void* priv) {
using atom::api::Tray;
v8::Isolate* isolate = context->GetIsolate();
v8::Handle<v8::Function> constructor = mate::CreateConstructor<Tray>(
v8::Local<v8::Function> constructor = mate::CreateConstructor<Tray>(
isolate, "Tray", base::Bind(&Tray::New));
mate::Dictionary dict(isolate, exports);
dict.Set("Tray", static_cast<v8::Handle<v8::Value>>(constructor));
dict.Set("Tray", static_cast<v8::Local<v8::Value>>(constructor));
}
} // namespace

View File

@@ -34,14 +34,14 @@ class Tray : public mate::EventEmitter,
static mate::Wrappable* New(const gfx::Image& image);
static void BuildPrototype(v8::Isolate* isolate,
v8::Handle<v8::ObjectTemplate> prototype);
v8::Local<v8::ObjectTemplate> prototype);
protected:
explicit Tray(const gfx::Image& image);
virtual ~Tray();
// TrayIconObserver:
void OnClicked() override;
void OnClicked(const gfx::Rect&) override;
void OnDoubleClicked() override;
void OnBalloonShow() override;
void OnBalloonClicked() override;

View File

@@ -4,29 +4,43 @@
#include "atom/browser/api/atom_api_web_contents.h"
#include <set>
#include "atom/browser/atom_browser_client.h"
#include "atom/browser/atom_browser_context.h"
#include "atom/browser/atom_javascript_dialog_manager.h"
#include "atom/browser/native_window.h"
#include "atom/browser/web_dialog_helper.h"
#include "atom/browser/web_view_manager.h"
#include "atom/common/api/api_messages.h"
#include "atom/common/native_mate_converters/gfx_converter.h"
#include "atom/common/native_mate_converters/gurl_converter.h"
#include "atom/common/native_mate_converters/image_converter.h"
#include "atom/common/native_mate_converters/string16_converter.h"
#include "atom/common/native_mate_converters/value_converter.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "brightray/browser/inspectable_web_contents.h"
#include "brightray/browser/media/media_stream_devices_controller.h"
#include "content/public/browser/favicon_status.h"
#include "content/public/browser/guest_host.h"
#include "content/public/browser/navigation_details.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/plugin_service.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/resource_request_details.h"
#include "content/public/browser/service_worker_context.h"
#include "content/public/browser/storage_partition.h"
#include "content/public/browser/site_instance.h"
#include "content/public/browser/web_contents.h"
#include "native_mate/callback.h"
#include "native_mate/dictionary.h"
#include "native_mate/object_template_builder.h"
#include "vendor/brightray/browser/media/media_stream_devices_controller.h"
#include "net/http/http_response_headers.h"
#include "net/url_request/url_request_context.h"
#include "atom/common/node_includes.h"
@@ -42,13 +56,27 @@ v8::Persistent<v8::ObjectTemplate> template_;
NativeWindow* GetWindowFromGuest(const content::WebContents* guest) {
WebViewManager::WebViewInfo info;
if (WebViewManager::GetInfoForProcess(guest->GetRenderProcessHost(), &info))
return NativeWindow::FromRenderView(
info.embedder->GetRenderProcessHost()->GetID(),
info.embedder->GetRoutingID());
return NativeWindow::FromWebContents(info.embedder);
else
return nullptr;
}
content::ServiceWorkerContext* GetServiceWorkerContext(
const content::WebContents* web_contents) {
auto context = web_contents->GetBrowserContext();
auto site_instance = web_contents->GetSiteInstance();
if (!context || !site_instance)
return nullptr;
content::StoragePartition* storage_partition =
content::BrowserContext::GetStoragePartition(
context, site_instance);
DCHECK(storage_partition);
return storage_partition->GetServiceWorkerContext();
}
} // namespace
WebContents::WebContents(content::WebContents* web_contents)
@@ -56,7 +84,7 @@ WebContents::WebContents(content::WebContents* web_contents)
guest_instance_id_(-1),
element_instance_id_(-1),
guest_opaque_(true),
guest_sizer_(nullptr),
guest_host_(nullptr),
auto_size_enabled_(false) {
}
@@ -64,7 +92,7 @@ WebContents::WebContents(const mate::Dictionary& options)
: guest_instance_id_(-1),
element_instance_id_(-1),
guest_opaque_(true),
guest_sizer_(nullptr),
guest_host_(nullptr),
auto_size_enabled_(false) {
options.Get("guestInstanceId", &guest_instance_id_);
@@ -136,11 +164,20 @@ content::WebContents* WebContents::OpenURLFromTab(
load_url_params.is_renderer_initiated = params.is_renderer_initiated;
load_url_params.transferred_global_request_id =
params.transferred_global_request_id;
load_url_params.should_clear_history_list = true;
web_contents()->GetController().LoadURLWithParams(load_url_params);
return web_contents();
}
content::JavaScriptDialogManager* WebContents::GetJavaScriptDialogManager(
content::WebContents* source) {
if (!dialog_manager_)
dialog_manager_.reset(new AtomJavaScriptDialogManager);
return dialog_manager_.get();
}
void WebContents::RunFileChooser(content::WebContents* guest,
const content::FileChooserParams& params) {
if (!web_dialog_helper_)
@@ -181,6 +218,36 @@ void WebContents::HandleKeyboardEvent(
web_contents(), event);
}
void WebContents::EnterFullscreenModeForTab(content::WebContents* source,
const GURL& origin) {
auto window = GetWindowFromGuest(source);
if (window) {
window->SetHtmlApiFullscreen(true);
window->NotifyWindowEnterHtmlFullScreen();
source->GetRenderViewHost()->WasResized();
Emit("enter-html-full-screen");
}
}
void WebContents::ExitFullscreenModeForTab(content::WebContents* source) {
auto window = GetWindowFromGuest(source);
if (window) {
window->SetHtmlApiFullscreen(false);
window->NotifyWindowLeaveHtmlFullScreen();
source->GetRenderViewHost()->WasResized();
Emit("leave-html-full-screen");
}
}
bool WebContents::IsFullscreenForTabOrPending(
const content::WebContents* source) const {
auto window = GetWindowFromGuest(source);
if (window)
return window->is_html_api_fullscreen();
else
return false;
}
void WebContents::RenderViewDeleted(content::RenderViewHost* render_view_host) {
Emit("render-view-deleted",
render_view_host->GetProcess()->GetID(),
@@ -191,6 +258,25 @@ void WebContents::RenderProcessGone(base::TerminationStatus status) {
Emit("crashed");
}
void WebContents::PluginCrashed(const base::FilePath& plugin_path,
base::ProcessId plugin_pid) {
content::WebPluginInfo info;
auto plugin_service = content::PluginService::GetInstance();
plugin_service->GetPluginInfoByPath(plugin_path, &info);
Emit("plugin-crashed", info.name, info.version);
}
void WebContents::OnGpuProcessCrashed(base::TerminationStatus exit_code) {
if (exit_code == base::TERMINATION_STATUS_PROCESS_CRASHED)
Emit("gpu-crashed");
}
void WebContents::DocumentLoadedInFrame(
content::RenderFrameHost* render_frame_host) {
if (!render_frame_host->GetParent())
Emit("dom-ready");
}
void WebContents::DidFinishLoad(content::RenderFrameHost* render_frame_host,
const GURL& validated_url) {
bool is_main_frame = !render_frame_host->GetParent();
@@ -216,14 +302,39 @@ void WebContents::DidFailLoad(content::RenderFrameHost* render_frame_host,
Emit("did-fail-load", error_code, error_description);
}
void WebContents::DidStartLoading(content::RenderViewHost* render_view_host) {
void WebContents::DidStartLoading() {
Emit("did-start-loading");
}
void WebContents::DidStopLoading(content::RenderViewHost* render_view_host) {
void WebContents::DidStopLoading() {
Emit("did-stop-loading");
}
void WebContents::DidGetResourceResponseStart(
const content::ResourceRequestDetails& details) {
v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8::Locker locker(isolate);
v8::HandleScope handle_scope(isolate);
mate::Dictionary response_headers(isolate, v8::Object::New(isolate));
net::HttpResponseHeaders* headers = details.headers.get();
void* iter = nullptr;
std::string key;
std::string value;
while (headers && headers->EnumerateHeaderLines(&iter, &key, &value))
response_headers.Set(base::StringToLowerASCII(key),
base::StringToLowerASCII(value));
Emit("did-get-response-details",
details.socket_address.IsEmpty(),
details.url,
details.original_url,
details.http_response_code,
details.method,
details.referrer,
response_headers);
}
void WebContents::DidGetRedirectForResourceRequest(
content::RenderFrameHost* render_frame_host,
const content::ResourceRedirectDetails& details) {
@@ -240,6 +351,26 @@ void WebContents::DidNavigateMainFrame(
Emit("did-navigate-to-different-page");
}
void WebContents::TitleWasSet(content::NavigationEntry* entry,
bool explicit_set) {
// Back/Forward navigation may have pruned entries.
if (entry)
Emit("page-title-set", entry->GetTitle(), explicit_set);
}
void WebContents::DidUpdateFaviconURL(
const std::vector<content::FaviconURL>& urls) {
std::set<GURL> unique_urls;
for (auto iter = urls.begin(); iter != urls.end(); ++iter) {
if (iter->icon_type != content::FaviconURL::FAVICON)
continue;
const GURL& url = iter->icon_url;
if (url.is_valid())
unique_urls.insert(url);
}
Emit("page-favicon-updated", unique_urls);
}
bool WebContents::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(WebContents, message)
@@ -278,9 +409,9 @@ void WebContents::WebContentsDestroyed() {
}
void WebContents::NavigationEntryCommitted(
const content::LoadCommittedDetails& load_details) {
auto entry = web_contents()->GetController().GetLastCommittedEntry();
entry->SetVirtualURL(load_details.entry->GetOriginalRequestURL());
const content::LoadCommittedDetails& details) {
Emit("navigation-entry-commited", details.entry->GetURL(),
details.is_in_page, details.did_replace_entry);
}
void WebContents::DidAttach(int guest_proxy_routing_id) {
@@ -292,28 +423,22 @@ void WebContents::ElementSizeChanged(const gfx::Size& size) {
// Only resize if needed.
if (!size.IsEmpty())
guest_sizer_->SizeContents(size);
guest_host_->SizeContents(size);
}
content::WebContents* WebContents::GetOwnerWebContents() const {
return embedder_web_contents_;
}
void WebContents::GuestSizeChanged(const gfx::Size& old_size,
const gfx::Size& new_size) {
void WebContents::GuestSizeChanged(const gfx::Size& new_size) {
if (!auto_size_enabled_)
return;
GuestSizeChangedDueToAutoSize(guest_size_, new_size);
guest_size_ = new_size;
GuestSizeChangedDueToAutoSize(old_size, new_size);
}
void WebContents::RegisterDestructionCallback(
const DestructionCallback& callback) {
destruction_callback_ = callback;
}
void WebContents::SetGuestSizer(content::GuestSizer* guest_sizer) {
guest_sizer_ = guest_sizer;
void WebContents::SetGuestHost(content::GuestHost* guest_host) {
guest_host_ = guest_host;
}
void WebContents::WillAttach(content::WebContents* embedder_web_contents,
@@ -325,12 +450,13 @@ void WebContents::WillAttach(content::WebContents* embedder_web_contents,
void WebContents::Destroy() {
if (storage_) {
if (!destruction_callback_.is_null())
destruction_callback_.Run();
// When force destroying the "destroyed" event is not emitted.
WebContentsDestroyed();
// Give the content module an opportunity to perform some cleanup.
guest_host_->WillDestroy();
guest_host_ = nullptr;
Observe(nullptr);
storage_.reset();
}
@@ -348,16 +474,16 @@ void WebContents::LoadURL(const GURL& url, const mate::Dictionary& options) {
params.referrer = content::Referrer(http_referrer.GetAsReferrer(),
blink::WebReferrerPolicyDefault);
std::string user_agent;
if (options.Get("useragent", &user_agent))
SetUserAgent(user_agent);
params.transition_type = ui::PAGE_TRANSITION_TYPED;
params.should_clear_history_list = true;
params.override_user_agent = content::NavigationController::UA_OVERRIDE_TRUE;
web_contents()->GetController().LoadURLWithParams(params);
}
GURL WebContents::GetURL() const {
auto entry = web_contents()->GetController().GetLastCommittedEntry();
return entry->GetVirtualURL();
}
base::string16 WebContents::GetTitle() const {
return web_contents()->GetTitle();
}
@@ -374,42 +500,22 @@ void WebContents::Stop() {
web_contents()->Stop();
}
void WebContents::Reload(const mate::Dictionary& options) {
// Navigating to a URL would always restart the renderer process, we want this
// because normal reloading will break our node integration.
// This is done by AtomBrowserClient::ShouldSwapProcessesForNavigation.
LoadURL(GetURL(), options);
}
void WebContents::ReloadIgnoringCache(const mate::Dictionary& options) {
Reload(options);
}
bool WebContents::CanGoBack() const {
return web_contents()->GetController().CanGoBack();
}
bool WebContents::CanGoForward() const {
return web_contents()->GetController().CanGoForward();
}
bool WebContents::CanGoToOffset(int offset) const {
return web_contents()->GetController().CanGoToOffset(offset);
void WebContents::ReloadIgnoringCache() {
web_contents()->GetController().ReloadIgnoringCache(false);
}
void WebContents::GoBack() {
atom::AtomBrowserClient::SuppressRendererProcessRestartForOnce();
web_contents()->GetController().GoBack();
}
void WebContents::GoForward() {
atom::AtomBrowserClient::SuppressRendererProcessRestartForOnce();
web_contents()->GetController().GoForward();
}
void WebContents::GoToIndex(int index) {
web_contents()->GetController().GoToIndex(index);
}
void WebContents::GoToOffset(int offset) {
atom::AtomBrowserClient::SuppressRendererProcessRestartForOnce();
web_contents()->GetController().GoToOffset(offset);
}
@@ -450,6 +556,13 @@ bool WebContents::IsDevToolsOpened() {
return storage_->IsDevToolsViewShowing();
}
void WebContents::InspectElement(int x, int y) {
OpenDevTools();
scoped_refptr<content::DevToolsAgentHost> agent(
content::DevToolsAgentHost::GetOrCreateFor(storage_->GetWebContents()));
agent->InspectElement(x, y);
}
void WebContents::Undo() {
web_contents()->Undo();
}
@@ -470,6 +583,10 @@ void WebContents::Paste() {
web_contents()->Paste();
}
void WebContents::PasteAndMatchStyle() {
web_contents()->PasteAndMatchStyle();
}
void WebContents::Delete() {
web_contents()->Delete();
}
@@ -541,6 +658,38 @@ void WebContents::SetAllowTransparency(bool allow) {
}
}
void WebContents::HasServiceWorker(
const base::Callback<void(bool)>& callback) {
auto context = GetServiceWorkerContext(web_contents());
if (!context)
return;
context->CheckHasServiceWorker(web_contents()->GetLastCommittedURL(),
GURL::EmptyGURL(),
callback);
}
void WebContents::UnregisterServiceWorker(
const base::Callback<void(bool)>& callback) {
auto context = GetServiceWorkerContext(web_contents());
if (!context)
return;
context->UnregisterServiceWorker(web_contents()->GetLastCommittedURL(),
callback);
}
void WebContents::InspectServiceWorker() {
for (const auto& agent_host : content::DevToolsAgentHost::GetOrCreateAll()) {
if (agent_host->GetType() ==
content::DevToolsAgentHost::TYPE_SERVICE_WORKER) {
OpenDevTools();
storage_->AttachTo(agent_host);
break;
}
}
}
mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
if (template_.IsEmpty())
@@ -548,20 +697,14 @@ mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder(
.SetMethod("destroy", &WebContents::Destroy)
.SetMethod("isAlive", &WebContents::IsAlive)
.SetMethod("_loadUrl", &WebContents::LoadURL)
.SetMethod("getUrl", &WebContents::GetURL)
.SetMethod("getTitle", &WebContents::GetTitle)
.SetMethod("isLoading", &WebContents::IsLoading)
.SetMethod("isWaitingForResponse", &WebContents::IsWaitingForResponse)
.SetMethod("stop", &WebContents::Stop)
.SetMethod("_reload", &WebContents::Reload)
.SetMethod("_stop", &WebContents::Stop)
.SetMethod("_reloadIgnoringCache", &WebContents::ReloadIgnoringCache)
.SetMethod("canGoBack", &WebContents::CanGoBack)
.SetMethod("canGoForward", &WebContents::CanGoForward)
.SetMethod("canGoToOffset", &WebContents::CanGoToOffset)
.SetMethod("goBack", &WebContents::GoBack)
.SetMethod("goForward", &WebContents::GoForward)
.SetMethod("goToIndex", &WebContents::GoToIndex)
.SetMethod("goToOffset", &WebContents::GoToOffset)
.SetMethod("_goBack", &WebContents::GoBack)
.SetMethod("_goForward", &WebContents::GoForward)
.SetMethod("_goToOffset", &WebContents::GoToOffset)
.SetMethod("getRoutingId", &WebContents::GetRoutingID)
.SetMethod("getProcessId", &WebContents::GetProcessID)
.SetMethod("isCrashed", &WebContents::IsCrashed)
@@ -571,11 +714,13 @@ mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder(
.SetMethod("openDevTools", &WebContents::OpenDevTools)
.SetMethod("closeDevTools", &WebContents::CloseDevTools)
.SetMethod("isDevToolsOpened", &WebContents::IsDevToolsOpened)
.SetMethod("inspectElement", &WebContents::InspectElement)
.SetMethod("undo", &WebContents::Undo)
.SetMethod("redo", &WebContents::Redo)
.SetMethod("cut", &WebContents::Cut)
.SetMethod("copy", &WebContents::Copy)
.SetMethod("paste", &WebContents::Paste)
.SetMethod("pasteAndMatchStyle", &WebContents::PasteAndMatchStyle)
.SetMethod("delete", &WebContents::Delete)
.SetMethod("selectAll", &WebContents::SelectAll)
.SetMethod("unselect", &WebContents::Unselect)
@@ -585,6 +730,10 @@ mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder(
.SetMethod("setAutoSize", &WebContents::SetAutoSize)
.SetMethod("setAllowTransparency", &WebContents::SetAllowTransparency)
.SetMethod("isGuest", &WebContents::is_guest)
.SetMethod("hasServiceWorker", &WebContents::HasServiceWorker)
.SetMethod("unregisterServiceWorker",
&WebContents::UnregisterServiceWorker)
.SetMethod("inspectServiceWorker", &WebContents::InspectServiceWorker)
.Build());
return mate::ObjectTemplateBuilder(
@@ -630,8 +779,8 @@ mate::Handle<WebContents> WebContents::Create(
namespace {
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
v8::Handle<v8::Context> context, void* priv) {
void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
v8::Local<v8::Context> context, void* priv) {
v8::Isolate* isolate = context->GetIsolate();
mate::Dictionary dict(isolate, exports);
dict.SetMethod("create", &atom::api::WebContents::Create);

View File

@@ -6,13 +6,17 @@
#define ATOM_BROWSER_API_ATOM_API_WEB_CONTENTS_H_
#include <string>
#include <vector>
#include "atom/browser/api/event_emitter.h"
#include "brightray/browser/default_web_contents_delegate.h"
#include "content/public/browser/browser_plugin_guest_delegate.h"
#include "content/public/common/favicon_url.h"
#include "content/public/browser/web_contents_delegate.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/gpu_data_manager_observer.h"
#include "native_mate/handle.h"
#include "ui/gfx/image/image.h"
namespace brightray {
class InspectableWebContents;
@@ -24,6 +28,7 @@ class Dictionary;
namespace atom {
class AtomJavaScriptDialogManager;
class WebDialogHelper;
namespace api {
@@ -31,7 +36,8 @@ namespace api {
class WebContents : public mate::EventEmitter,
public content::BrowserPluginGuestDelegate,
public content::WebContentsDelegate,
public content::WebContentsObserver {
public content::WebContentsObserver,
public content::GpuDataManagerObserver {
public:
// Create from an existing WebContents.
static mate::Handle<WebContents> CreateFrom(
@@ -44,19 +50,13 @@ class WebContents : public mate::EventEmitter,
void Destroy();
bool IsAlive() const;
void LoadURL(const GURL& url, const mate::Dictionary& options);
GURL GetURL() const;
base::string16 GetTitle() const;
bool IsLoading() const;
bool IsWaitingForResponse() const;
void Stop();
void Reload(const mate::Dictionary& options);
void ReloadIgnoringCache(const mate::Dictionary& options);
bool CanGoBack() const;
bool CanGoForward() const;
bool CanGoToOffset(int offset) const;
void ReloadIgnoringCache();
void GoBack();
void GoForward();
void GoToIndex(int index);
void GoToOffset(int offset);
int GetRoutingID() const;
int GetProcessID() const;
@@ -67,6 +67,10 @@ class WebContents : public mate::EventEmitter,
void OpenDevTools();
void CloseDevTools();
bool IsDevToolsOpened();
void InspectElement(int x, int y);
void HasServiceWorker(const base::Callback<void(bool)>&);
void UnregisterServiceWorker(const base::Callback<void(bool)>&);
void InspectServiceWorker();
// Editing commands.
void Undo();
@@ -74,6 +78,7 @@ class WebContents : public mate::EventEmitter,
void Cut();
void Copy();
void Paste();
void PasteAndMatchStyle();
void Delete();
void SelectAll();
void Unselect();
@@ -130,6 +135,8 @@ class WebContents : public mate::EventEmitter,
content::WebContents* OpenURLFromTab(
content::WebContents* source,
const content::OpenURLParams& params) override;
content::JavaScriptDialogManager* GetJavaScriptDialogManager(
content::WebContents* source) override;
void RunFileChooser(content::WebContents* web_contents,
const content::FileChooserParams& params) override;
void EnumerateDirectory(content::WebContents* web_contents,
@@ -145,10 +152,17 @@ class WebContents : public mate::EventEmitter,
void HandleKeyboardEvent(
content::WebContents* source,
const content::NativeWebKeyboardEvent& event) override;
void EnterFullscreenModeForTab(content::WebContents* source,
const GURL& origin) override;
void ExitFullscreenModeForTab(content::WebContents* source) override;
bool IsFullscreenForTabOrPending(
const content::WebContents* source) const override;
// content::WebContentsObserver:
void RenderViewDeleted(content::RenderViewHost*) override;
void RenderProcessGone(base::TerminationStatus status) override;
void DocumentLoadedInFrame(
content::RenderFrameHost* render_frame_host) override;
void DidFinishLoad(content::RenderFrameHost* render_frame_host,
const GURL& validated_url) override;
void DidFailLoad(content::RenderFrameHost* render_frame_host,
@@ -159,8 +173,10 @@ class WebContents : public mate::EventEmitter,
const GURL& validated_url,
int error_code,
const base::string16& error_description) override;
void DidStartLoading(content::RenderViewHost* render_view_host) override;
void DidStopLoading(content::RenderViewHost* render_view_host) override;
void DidStartLoading() override;
void DidStopLoading() override;
void DidGetResourceResponseStart(
const content::ResourceRequestDetails& details) override;
void DidGetRedirectForResourceRequest(
content::RenderFrameHost* render_frame_host,
const content::ResourceRedirectDetails& details) override;
@@ -172,19 +188,25 @@ class WebContents : public mate::EventEmitter,
void WebContentsDestroyed() override;
void NavigationEntryCommitted(
const content::LoadCommittedDetails& load_details) override;
void TitleWasSet(content::NavigationEntry* entry, bool explicit_set) override;
void DidUpdateFaviconURL(
const std::vector<content::FaviconURL>& urls) override;
void PluginCrashed(const base::FilePath& plugin_path,
base::ProcessId plugin_pid) override;
// content::BrowserPluginGuestDelegate:
void DidAttach(int guest_proxy_routing_id) final;
void ElementSizeChanged(const gfx::Size& size) final;
content::WebContents* GetOwnerWebContents() const final;
void GuestSizeChanged(const gfx::Size& old_size,
const gfx::Size& new_size) final;
void RegisterDestructionCallback(const DestructionCallback& callback) final;
void SetGuestSizer(content::GuestSizer* guest_sizer) final;
void GuestSizeChanged(const gfx::Size& new_size) final;
void SetGuestHost(content::GuestHost* guest_host) final;
void WillAttach(content::WebContents* embedder_web_contents,
int element_instance_id,
bool is_full_page_plugin) final;
// content::GpuDataManagerObserver:
void OnGpuProcessCrashed(base::TerminationStatus exit_code) override;
private:
// Called when received a message from renderer.
void OnRendererMessage(const base::string16& channel,
@@ -199,6 +221,7 @@ class WebContents : public mate::EventEmitter,
const gfx::Size& new_size);
scoped_ptr<WebDialogHelper> web_dialog_helper_;
scoped_ptr<AtomJavaScriptDialogManager> dialog_manager_;
// Unique ID for a guest WebContents.
int guest_instance_id_;
@@ -207,8 +230,6 @@ class WebContents : public mate::EventEmitter,
// element.
int element_instance_id_;
DestructionCallback destruction_callback_;
// Stores whether the contents of the guest can be transparent.
bool guest_opaque_;
@@ -225,8 +246,8 @@ class WebContents : public mate::EventEmitter,
// element may not match the size of the guest.
gfx::Size guest_size_;
// A pointer to the guest_sizer.
content::GuestSizer* guest_sizer_;
// A pointer to the guest_host.
content::GuestHost* guest_host_;
// Indicates whether autosize mode is enabled or not.
bool auto_size_enabled_;

View File

@@ -15,7 +15,7 @@ namespace mate {
template<>
struct Converter<content::WebContents*> {
static bool FromV8(v8::Isolate* isolate, v8::Handle<v8::Value> val,
static bool FromV8(v8::Isolate* isolate, v8::Local<v8::Value> val,
content::WebContents** out) {
atom::api::WebContents* contents;
if (!Converter<atom::api::WebContents*>::FromV8(isolate, val, &contents))
@@ -27,7 +27,7 @@ struct Converter<content::WebContents*> {
template<>
struct Converter<atom::WebViewManager::WebViewInfo> {
static bool FromV8(v8::Isolate* isolate, v8::Handle<v8::Value> val,
static bool FromV8(v8::Isolate* isolate, v8::Local<v8::Value> val,
atom::WebViewManager::WebViewInfo* out) {
Dictionary options;
if (!ConvertFromV8(isolate, val, &options))
@@ -81,8 +81,8 @@ void RemoveGuest(content::WebContents* embedder, int guest_instance_id) {
manager->RemoveGuest(guest_instance_id);
}
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
v8::Handle<v8::Context> context, void* priv) {
void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
v8::Local<v8::Context> context, void* priv) {
mate::Dictionary dict(context->GetIsolate(), exports);
dict.SetMethod("addGuest", &AddGuest);
dict.SetMethod("removeGuest", &RemoveGuest);

View File

@@ -15,6 +15,7 @@
#include "native_mate/callback.h"
#include "native_mate/constructor.h"
#include "native_mate/dictionary.h"
#include "ui/gfx/geometry/rect.h"
#include "atom/common/node_includes.h"
@@ -31,7 +32,7 @@ namespace mate {
template<>
struct Converter<PrintSettings> {
static bool FromV8(v8::Isolate* isolate, v8::Handle<v8::Value> val,
static bool FromV8(v8::Isolate* isolate, v8::Local<v8::Value> val,
PrintSettings* out) {
mate::Dictionary dict;
if (!ConvertFromV8(isolate, val, &dict))
@@ -53,10 +54,10 @@ namespace {
void OnCapturePageDone(
v8::Isolate* isolate,
const base::Callback<void(const gfx::Image&)>& callback,
const std::vector<unsigned char>& data) {
const SkBitmap& bitmap) {
v8::Locker locker(isolate);
v8::HandleScope handle_scope(isolate);
callback.Run(gfx::Image::CreateFrom1xPNGBytes(&data.front(), data.size()));
callback.Run(gfx::Image::CreateFrom1xBitmap(bitmap));
}
} // namespace
@@ -123,6 +124,18 @@ void Window::OnWindowRestore() {
Emit("restore");
}
void Window::OnWindowResize() {
Emit("resize");
}
void Window::OnWindowMove() {
Emit("move");
}
void Window::OnWindowMoved() {
Emit("moved");
}
void Window::OnWindowEnterFullScreen() {
Emit("enter-full-screen");
}
@@ -131,6 +144,14 @@ void Window::OnWindowLeaveFullScreen() {
Emit("leave-full-screen");
}
void Window::OnWindowEnterHtmlFullScreen() {
Emit("enter-html-full-screen");
}
void Window::OnWindowLeaveHtmlFullScreen() {
Emit("leave-html-full-screen");
}
void Window::OnRendererUnresponsive() {
Emit("unresponsive");
}
@@ -139,16 +160,18 @@ void Window::OnRendererResponsive() {
Emit("responsive");
}
void Window::OnDevToolsFocus() {
Emit("devtools-focused");
}
// static
mate::Wrappable* Window::New(v8::Isolate* isolate,
const mate::Dictionary& options) {
if (Browser::Get()->is_ready()) {
return new Window(options);
} else {
isolate->ThrowException(v8::Exception::TypeError(mate::StringToV8(
isolate, "Can not create BrowserWindow before app is ready")));
if (!Browser::Get()->is_ready()) {
node::ThrowError("Cannot create BrowserWindow before app is ready");
return nullptr;
}
return new Window(options);
}
void Window::Destroy() {
@@ -220,6 +243,14 @@ bool Window::IsFullscreen() {
return window_->IsFullscreen();
}
void Window::SetBounds(const gfx::Rect& bounds) {
window_->SetBounds(bounds);
}
gfx::Rect Window::GetBounds() {
return window_->GetBounds();
}
void Window::SetSize(int width, int height) {
window_->SetSize(gfx::Size(width, height));
}
@@ -324,8 +355,8 @@ bool Window::IsKiosk() {
return window_->IsKiosk();
}
void Window::OpenDevTools() {
window_->OpenDevTools();
void Window::OpenDevTools(bool can_dock) {
window_->OpenDevTools(can_dock);
}
void Window::CloseDevTools() {
@@ -340,6 +371,10 @@ void Window::InspectElement(int x, int y) {
window_->InspectElement(x, y);
}
void Window::InspectServiceWorker() {
window_->InspectServiceWorker();
}
void Window::FocusOnWebView() {
window_->FocusOnWebView();
}
@@ -424,6 +459,14 @@ void Window::ShowDefinitionForSelection() {
}
#endif
void Window::SetVisibleOnAllWorkspaces(bool visible) {
return window_->SetVisibleOnAllWorkspaces(visible);
}
bool Window::IsVisibleOnAllWorkspaces() {
return window_->IsVisibleOnAllWorkspaces();
}
mate::Handle<WebContents> Window::GetWebContents(v8::Isolate* isolate) const {
return WebContents::CreateFrom(isolate, window_->GetWebContents());
}
@@ -435,7 +478,7 @@ mate::Handle<WebContents> Window::GetDevToolsWebContents(
// static
void Window::BuildPrototype(v8::Isolate* isolate,
v8::Handle<v8::ObjectTemplate> prototype) {
v8::Local<v8::ObjectTemplate> prototype) {
mate::ObjectTemplateBuilder(isolate, prototype)
.SetMethod("destroy", &Window::Destroy)
.SetMethod("close", &Window::Close)
@@ -454,6 +497,8 @@ void Window::BuildPrototype(v8::Isolate* isolate,
.SetMethod("isMinimized", &Window::IsMinimized)
.SetMethod("setFullScreen", &Window::SetFullScreen)
.SetMethod("isFullScreen", &Window::IsFullscreen)
.SetMethod("getBounds", &Window::GetBounds)
.SetMethod("setBounds", &Window::SetBounds)
.SetMethod("getSize", &Window::GetSize)
.SetMethod("setSize", &Window::SetSize)
.SetMethod("getContentSize", &Window::GetContentSize)
@@ -494,12 +539,17 @@ void Window::BuildPrototype(v8::Isolate* isolate,
.SetMethod("isMenuBarAutoHide", &Window::IsMenuBarAutoHide)
.SetMethod("setMenuBarVisibility", &Window::SetMenuBarVisibility)
.SetMethod("isMenuBarVisible", &Window::IsMenuBarVisible)
.SetMethod("setVisibleOnAllWorkspaces",
&Window::SetVisibleOnAllWorkspaces)
.SetMethod("isVisibleOnAllWorkspaces",
&Window::IsVisibleOnAllWorkspaces)
#if defined(OS_MACOSX)
.SetMethod("showDefinitionForSelection",
&Window::ShowDefinitionForSelection)
#endif
.SetMethod("_getWebContents", &Window::GetWebContents)
.SetMethod("_getDevToolsWebContents", &Window::GetDevToolsWebContents);
.SetMethod("_getDevToolsWebContents", &Window::GetDevToolsWebContents)
.SetMethod("inspectServiceWorker", &Window::InspectServiceWorker);
}
} // namespace api
@@ -509,14 +559,14 @@ void Window::BuildPrototype(v8::Isolate* isolate,
namespace {
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
v8::Handle<v8::Context> context, void* priv) {
void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
v8::Local<v8::Context> context, void* priv) {
using atom::api::Window;
v8::Isolate* isolate = context->GetIsolate();
v8::Local<v8::Function> constructor = mate::CreateConstructor<Window>(
isolate, "BrowserWindow", base::Bind(&Window::New));
mate::Dictionary dict(isolate, exports);
dict.Set("BrowserWindow", static_cast<v8::Handle<v8::Value>>(constructor));
dict.Set("BrowserWindow", static_cast<v8::Local<v8::Value>>(constructor));
}
} // namespace

View File

@@ -16,6 +16,10 @@
class GURL;
namespace gfx {
class Rect;
}
namespace mate {
class Arguments;
class Dictionary;
@@ -36,7 +40,7 @@ class Window : public mate::EventEmitter,
const mate::Dictionary& options);
static void BuildPrototype(v8::Isolate* isolate,
v8::Handle<v8::ObjectTemplate> prototype);
v8::Local<v8::ObjectTemplate> prototype);
NativeWindow* window() const { return window_.get(); }
@@ -60,10 +64,16 @@ class Window : public mate::EventEmitter,
void OnWindowUnmaximize() override;
void OnWindowMinimize() override;
void OnWindowRestore() override;
void OnWindowResize() override;
void OnWindowMove() override;
void OnWindowMoved() override;
void OnWindowEnterFullScreen() override;
void OnWindowLeaveFullScreen() override;
void OnWindowEnterHtmlFullScreen() override;
void OnWindowLeaveHtmlFullScreen() override;
void OnRendererUnresponsive() override;
void OnRendererResponsive() override;
void OnDevToolsFocus() override;
private:
// APIs for NativeWindow.
@@ -84,6 +94,8 @@ class Window : public mate::EventEmitter,
bool IsMinimized();
void SetFullScreen(bool fullscreen);
bool IsFullscreen();
void SetBounds(const gfx::Rect& bounds);
gfx::Rect GetBounds();
void SetSize(int width, int height);
std::vector<int> GetSize();
void SetContentSize(int width, int height);
@@ -105,10 +117,11 @@ class Window : public mate::EventEmitter,
void SetSkipTaskbar(bool skip);
void SetKiosk(bool kiosk);
bool IsKiosk();
void OpenDevTools();
void OpenDevTools(bool can_dock);
void CloseDevTools();
bool IsDevToolsOpened();
void InspectElement(int x, int y);
void InspectServiceWorker();
void FocusOnWebView();
void BlurWebView();
bool IsWebViewFocused();
@@ -130,6 +143,9 @@ class Window : public mate::EventEmitter,
void ShowDefinitionForSelection();
#endif
void SetVisibleOnAllWorkspaces(bool visible);
bool IsVisibleOnAllWorkspaces();
// APIs for WebContents.
mate::Handle<WebContents> GetWebContents(v8::Isolate* isolate) const;
mate::Handle<WebContents> GetDevToolsWebContents(v8::Isolate* isolate) const;
@@ -148,7 +164,7 @@ namespace mate {
template<>
struct Converter<atom::NativeWindow*> {
static bool FromV8(v8::Isolate* isolate, v8::Handle<v8::Value> val,
static bool FromV8(v8::Isolate* isolate, v8::Local<v8::Value> val,
atom::NativeWindow** out) {
// null would be tranfered to NULL.
if (val->IsNull()) {

View File

@@ -43,13 +43,13 @@ bool EventEmitter::CallEmit(v8::Isolate* isolate,
content::WebContents* sender,
IPC::Message* message,
ValueArray args) {
v8::Handle<v8::Object> event;
v8::Local<v8::Object> event;
bool use_native_event = sender && message;
if (use_native_event) {
mate::Handle<mate::Event> native_event = mate::Event::Create(isolate);
native_event->SetSenderAndMessage(sender, message);
event = v8::Handle<v8::Object>::Cast(native_event.ToV8());
event = v8::Local<v8::Object>::Cast(native_event.ToV8());
} else {
event = CreateEventObject(isolate);
}

View File

@@ -22,7 +22,7 @@ namespace mate {
// Provide helperers to emit event in JavaScript.
class EventEmitter : public Wrappable {
public:
typedef std::vector<v8::Handle<v8::Value>> ValueArray;
typedef std::vector<v8::Local<v8::Value>> ValueArray;
protected:
EventEmitter();

View File

@@ -40,8 +40,9 @@ BrowserWindow::_init = ->
@once 'closed', =>
BrowserWindow.windows.remove @id if BrowserWindow.windows.has @id
BrowserWindow::openDevTools = ->
@_openDevTools()
BrowserWindow::openDevTools = (options={}) ->
options.detach ?= false
@_openDevTools !options.detach
# Force devToolsWebContents to be created.
@devToolsWebContents = @getDevToolsWebContents()

View File

@@ -23,6 +23,37 @@ generateGroupId = (items, pos) ->
break if item.type is 'separator'
++nextGroupId
# Returns the index of item according to |id|.
indexOfItemById = (items, id) ->
return i for item, i in items when item.id is id
-1
# Returns the index of where to insert the item according to |position|.
indexToInsertByPosition = (items, position) ->
return items.length unless position
[query, id] = position.split '='
insertIndex = indexOfItemById items, id
if insertIndex is -1 and query isnt 'endof'
console.warn "Item with id '#{id}' is not found"
return items.length
switch query
when 'after'
insertIndex++
when 'endof'
# If the |id| doesn't exist, then create a new group with the |id|.
if insertIndex is -1
items.push id: id, type: 'separator'
insertIndex = items.length - 1
# Find the end of the group.
insertIndex++
while insertIndex < items.length and items[insertIndex].type isnt 'separator'
insertIndex++
insertIndex
Menu = bindings.Menu
Menu::__proto__ = EventEmitter.prototype
@@ -116,14 +147,25 @@ Menu.sendActionToFirstResponder = bindings.sendActionToFirstResponder
Menu.buildFromTemplate = (template) ->
throw new TypeError('Invalid template for Menu') unless Array.isArray template
menu = new Menu
positionedTemplate = []
insertIndex = 0
for item in template
if item.position
insertIndex = indexToInsertByPosition positionedTemplate, item.position
else
# If no |position| is specified, insert after last item.
insertIndex++
positionedTemplate.splice insertIndex, 0, item
menu = new Menu
for item in positionedTemplate
throw new TypeError('Invalid template for MenuItem') unless typeof item is 'object'
item.submenu = Menu.buildFromTemplate item.submenu if item.submenu?
menuItem = new MenuItem(item)
menuItem[key] = value for key, value of item when not menuItem[key]?
menu.append menuItem
menu

View File

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

View File

@@ -16,8 +16,22 @@ class RequestStringJob
@charset = charset ? 'UTF-8'
@data = String data
protocol.RequestBufferJob =
class RequestBufferJob
constructor: ({mimeType, encoding, data}) ->
if not data instanceof Buffer
throw new TypeError('Data should be Buffer')
@mimeType = mimeType ? 'application/octet-stream'
@encoding = encoding ? 'utf8'
@data = new Buffer(data)
protocol.RequestFileJob =
class RequestFileJob
constructor: (@path) ->
protocol.RequestErrorJob =
class RequestErrorJob
constructor: (@error) ->
module.exports = protocol

View File

@@ -1,4 +1,5 @@
EventEmitter = require('events').EventEmitter
NavigationController = require './navigation-controller'
binding = process.atomBinding 'web_contents'
ipc = require 'ipc'
@@ -26,10 +27,11 @@ module.exports.wrap = (webContents) ->
webContents.getId = -> "#{@getProcessId()}-#{@getRoutingId()}"
webContents.equal = (other) -> @getId() is other.getId()
# Provide a default parameter for |urlOptions|.
webContents.loadUrl = (url, urlOptions={}) -> @_loadUrl url, urlOptions
webContents.reload = (urlOptions={}) -> @_reload urlOptions
webContents.reloadIgnoringCache = (urlOptions={}) -> @_reloadIgnoringCache urlOptions
# The navigation controller.
controller = new NavigationController(webContents)
for name, method of NavigationController.prototype when method instanceof Function
do (name, method) ->
webContents[name] = -> method.apply controller, arguments
# Translate |disposition| to string for 'new-window' event.
webContents.on '-new-window', (args..., disposition) ->

View File

@@ -7,6 +7,7 @@
#include "atom/browser/atom_access_token_store.h"
#include "atom/browser/atom_browser_context.h"
#include "atom/browser/atom_browser_main_parts.h"
#include "atom/browser/atom_quota_permission_context.h"
#include "atom/browser/atom_resource_dispatcher_host_delegate.h"
#include "atom/browser/atom_speech_recognition_manager_delegate.h"
#include "atom/browser/native_window.h"
@@ -16,19 +17,25 @@
#include "base/command_line.h"
#include "base/strings/string_number_conversions.h"
#include "chrome/browser/printing/printing_message_filter.h"
#include "chrome/browser/renderer_host/pepper/chrome_browser_pepper_host_factory.h"
#include "chrome/browser/speech/tts_message_filter.h"
#include "content/public/browser/browser_ppapi_host.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/resource_dispatcher_host.h"
#include "content/public/browser/site_instance.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/web_preferences.h"
#include "ppapi/host/ppapi_host.h"
#include "ui/base/l10n/l10n_util.h"
namespace atom {
namespace {
// Next navigation should not restart renderer process.
bool g_suppress_renderer_process_restart = false;
struct FindByProcessId {
explicit FindByProcessId(int child_process_id)
: child_process_id_(child_process_id) {
@@ -48,8 +55,13 @@ struct FindByProcessId {
} // namespace
// static
void AtomBrowserClient::SuppressRendererProcessRestartForOnce() {
g_suppress_renderer_process_restart = true;
}
AtomBrowserClient::AtomBrowserClient()
: dying_render_process_(NULL) {
: dying_render_process_(nullptr) {
}
AtomBrowserClient::~AtomBrowserClient() {
@@ -79,7 +91,6 @@ void AtomBrowserClient::ResourceDispatcherHostCreated() {
void AtomBrowserClient::OverrideWebkitPrefs(
content::RenderViewHost* render_view_host,
const GURL& url,
content::WebPreferences* prefs) {
prefs->javascript_enabled = true;
prefs->web_security_enabled = true;
@@ -99,7 +110,9 @@ void AtomBrowserClient::OverrideWebkitPrefs(
prefs->allow_running_insecure_content = false;
// Turn off web security for devtools.
if (url.SchemeIs("chrome-devtools")) {
auto web_contents = content::WebContents::FromRenderViewHost(
render_view_host);
if (web_contents && web_contents->GetURL().SchemeIs("chrome-devtools")) {
prefs->web_security_enabled = false;
return;
}
@@ -112,33 +125,44 @@ void AtomBrowserClient::OverrideWebkitPrefs(
return;
}
NativeWindow* window = NativeWindow::FromRenderView(
process->GetID(), render_view_host->GetRoutingID());
NativeWindow* window = NativeWindow::FromWebContents(web_contents);
if (window)
window->OverrideWebkitPrefs(url, prefs);
}
bool AtomBrowserClient::ShouldSwapBrowsingInstancesForNavigation(
content::SiteInstance* site_instance,
const GURL& current_url,
const GURL& new_url) {
if (site_instance->HasProcess())
dying_render_process_ = site_instance->GetProcess();
// Restart renderer process for all navigations, this relies on a patch to
// Chromium: http://git.io/_PaNyg.
return true;
window->OverrideWebkitPrefs(prefs);
}
std::string AtomBrowserClient::GetApplicationLocale() {
return l10n_util::GetApplicationLocale("");
}
void AtomBrowserClient::OverrideSiteInstanceForNavigation(
content::BrowserContext* browser_context,
content::SiteInstance* current_instance,
const GURL& url,
content::SiteInstance** new_instance) {
if (g_suppress_renderer_process_restart) {
g_suppress_renderer_process_restart = false;
return;
}
if (current_instance->HasProcess())
dying_render_process_ = current_instance->GetProcess();
if (!url.SchemeIs(url::kJavaScriptScheme)) {
// Restart renderer process for all navigations except javacript: scheme.
*new_instance = content::SiteInstance::CreateForURL(browser_context, url);
}
}
void AtomBrowserClient::AppendExtraCommandLineSwitches(
base::CommandLine* command_line,
int child_process_id) {
std::string process_type = command_line->GetSwitchValueASCII("type");
if (process_type != "renderer")
return;
WindowList* list = WindowList::GetInstance();
NativeWindow* window = NULL;
NativeWindow* window = nullptr;
// Find the owner of this child process.
WindowList::const_iterator iter = std::find_if(
@@ -149,15 +173,25 @@ void AtomBrowserClient::AppendExtraCommandLineSwitches(
// If the render process is a newly started one, which means the window still
// uses the old going-to-be-swapped render process, then we try to find the
// window from the swapped render process.
if (window == NULL && dying_render_process_ != NULL) {
child_process_id = dying_render_process_->GetID();
if (!window && dying_render_process_) {
int dying_process_id = dying_render_process_->GetID();
WindowList::const_iterator iter = std::find_if(
list->begin(), list->end(), FindByProcessId(child_process_id));
if (iter != list->end())
list->begin(), list->end(), FindByProcessId(dying_process_id));
if (iter != list->end()) {
window = *iter;
child_process_id = dying_process_id;
} else {
// It appears that the dying process doesn't belong to a BrowserWindow,
// then it might be a guest process, if it is we should update its
// process ID in the WebViewManager.
auto child_process = content::RenderProcessHost::FromID(child_process_id);
// Update the process ID in webview guests.
WebViewManager::UpdateGuestProcessID(dying_render_process_,
child_process);
}
}
if (window != NULL) {
if (window) {
window->AppendExtraCommandLineSwitches(command_line, child_process_id);
} else {
// Append commnad line arguments for guest web view.
@@ -179,7 +213,21 @@ void AtomBrowserClient::AppendExtraCommandLineSwitches(
}
}
dying_render_process_ = NULL;
dying_render_process_ = nullptr;
}
void AtomBrowserClient::DidCreatePpapiPlugin(
content::BrowserPpapiHost* browser_host) {
auto command_line = base::CommandLine::ForCurrentProcess();
if (command_line->HasSwitch(switches::kEnablePlugins))
browser_host->GetPpapiHost()->AddHostFactoryFilter(
scoped_ptr<ppapi::host::HostFactory>(
new chrome::ChromeBrowserPepperHostFactory(browser_host)));
}
content::QuotaPermissionContext*
AtomBrowserClient::CreateQuotaPermissionContext() {
return new AtomQuotaPermissionContext;
}
brightray::BrowserMainParts* AtomBrowserClient::OverrideCreateBrowserMainParts(

View File

@@ -9,6 +9,10 @@
#include "brightray/browser/browser_client.h"
namespace content {
class QuotaPermissionContext;
}
namespace atom {
class AtomResourceDispatcherHostDelegate;
@@ -18,6 +22,9 @@ class AtomBrowserClient : public brightray::BrowserClient {
AtomBrowserClient();
virtual ~AtomBrowserClient();
// Don't force renderer process to restart for once.
static void SuppressRendererProcessRestartForOnce();
protected:
// content::ContentBrowserClient:
void RenderProcessWillLaunch(content::RenderProcessHost* host) override;
@@ -26,15 +33,17 @@ class AtomBrowserClient : public brightray::BrowserClient {
content::AccessTokenStore* CreateAccessTokenStore() override;
void ResourceDispatcherHostCreated() override;
void OverrideWebkitPrefs(content::RenderViewHost* render_view_host,
const GURL& url,
content::WebPreferences* prefs) override;
bool ShouldSwapBrowsingInstancesForNavigation(
content::SiteInstance* site_instance,
const GURL& current_url,
const GURL& new_url) override;
std::string GetApplicationLocale() override;
void OverrideSiteInstanceForNavigation(
content::BrowserContext* browser_context,
content::SiteInstance* current_instance,
const GURL& dest_url,
content::SiteInstance** new_instance);
void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
int child_process_id) override;
void DidCreatePpapiPlugin(content::BrowserPpapiHost* browser_host) override;
content::QuotaPermissionContext* CreateQuotaPermissionContext() override;
private:
brightray::BrowserMainParts* OverrideCreateBrowserMainParts(

View File

@@ -7,6 +7,7 @@
#include "atom/browser/atom_browser_main_parts.h"
#include "atom/browser/net/atom_url_request_job_factory.h"
#include "atom/browser/net/asar/asar_protocol_handler.h"
#include "atom/browser/net/http_protocol_handler.h"
#include "atom/browser/web_view_manager.h"
#include "atom/common/options_switches.h"
#include "base/command_line.h"
@@ -15,8 +16,11 @@
#include "chrome/browser/browser_process.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/common/url_constants.h"
#include "net/ftp/ftp_network_layer.h"
#include "net/url_request/data_protocol_handler.h"
#include "net/url_request/ftp_protocol_handler.h"
#include "net/url_request/url_request_intercepting_job_factory.h"
#include "net/url_request/url_request_context.h"
#include "url/url_constants.h"
using content::BrowserThread;
@@ -59,6 +63,21 @@ net::URLRequestJobFactory* AtomBrowserContext::CreateURLRequestJobFactory(
url::kFileScheme, new asar::AsarProtocolHandler(
BrowserThread::GetBlockingPool()->GetTaskRunnerWithShutdownBehavior(
base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)));
job_factory->SetProtocolHandler(
url::kHttpScheme, new HttpProtocolHandler(url::kHttpScheme));
job_factory->SetProtocolHandler(
url::kHttpsScheme, new HttpProtocolHandler(url::kHttpsScheme));
job_factory->SetProtocolHandler(
url::kWsScheme, new HttpProtocolHandler(url::kWsScheme));
job_factory->SetProtocolHandler(
url::kWssScheme, new HttpProtocolHandler(url::kWssScheme));
auto host_resolver = url_request_context_getter()
->GetURLRequestContext()
->host_resolver();
job_factory->SetProtocolHandler(
url::kFtpScheme, new net::FtpProtocolHandler(
new net::FtpNetworkLayer(host_resolver)));
// Set up interceptors in the reverse order.
scoped_ptr<net::URLRequestJobFactory> top_job_factory = job_factory.Pass();

View File

@@ -8,7 +8,6 @@
#include "atom/browser/atom_browser_context.h"
#include "atom/browser/browser.h"
#include "atom/browser/javascript_environment.h"
#include "atom/browser/node_debugger.h"
#include "atom/common/api/atom_bindings.h"
#include "atom/common/node_bindings.h"
#include "base/command_line.h"
@@ -60,16 +59,9 @@ void AtomBrowserMainParts::PostEarlyInitialization() {
node_bindings_->Initialize();
// Support the "--debug" switch.
node_debugger_.reset(new NodeDebugger(js_env_->isolate()));
// Create the global environment.
global_env = node_bindings_->CreateEnvironment(js_env_->context());
// Make sure node can get correct environment when debugging.
if (node_debugger_->IsRunning())
global_env->AssignToContext(v8::Debug::GetDebugContext());
// Add atom-shell extended APIs.
atom_bindings_->BindTo(js_env_->isolate(), global_env->process_object());

View File

@@ -14,7 +14,6 @@ class AtomBindings;
class Browser;
class JavascriptEnvironment;
class NodeBindings;
class NodeDebugger;
class AtomBrowserMainParts : public brightray::BrowserMainParts {
public:
@@ -46,7 +45,6 @@ class AtomBrowserMainParts : public brightray::BrowserMainParts {
scoped_ptr<JavascriptEnvironment> js_env_;
scoped_ptr<NodeBindings> node_bindings_;
scoped_ptr<AtomBindings> atom_bindings_;
scoped_ptr<NodeDebugger> node_debugger_;
base::Timer gc_timer_;

View File

@@ -4,9 +4,10 @@
#include "atom/browser/atom_browser_main_parts.h"
#include <gio/gio.h>
#include "base/command_line.h"
#include "base/strings/string_number_conversions.h"
#include "library_loaders/libgio.h"
#include "ui/gfx/switches.h"
namespace atom {
@@ -16,8 +17,8 @@ namespace {
const char* kInterfaceSchema = "org.gnome.desktop.interface";
const char* kScaleFactor = "scaling-factor";
bool SchemaExists(const LibGioLoader& libgio_loader, const char* schema_name) {
const gchar* const* schemas = libgio_loader.g_settings_list_schemas();
bool SchemaExists(const char* schema_name) {
const gchar* const* schemas = g_settings_list_schemas();
while (*schemas) {
if (strcmp(schema_name, static_cast<const char*>(*schemas)) == 0)
return true;
@@ -26,9 +27,8 @@ bool SchemaExists(const LibGioLoader& libgio_loader, const char* schema_name) {
return false;
}
bool KeyExists(const LibGioLoader& libgio_loader, GSettings* client,
const char* key) {
gchar** keys = libgio_loader.g_settings_list_keys(client);
bool KeyExists(GSettings* client, const char* key) {
gchar** keys = g_settings_list_keys(client);
if (!keys)
return false;
@@ -45,24 +45,15 @@ bool KeyExists(const LibGioLoader& libgio_loader, GSettings* client,
}
void GetDPIFromGSettings(guint* scale_factor) {
LibGioLoader libgio_loader;
// Try also without .0 at the end; on some systems this may be required.
if (!libgio_loader.Load("libgio-2.0.so.0") &&
!libgio_loader.Load("libgio-2.0.so")) {
VLOG(1) << "Cannot load gio library. Will fall back to gconf.";
return;
}
GSettings* client = nullptr;
if (!SchemaExists(libgio_loader, kInterfaceSchema) ||
!(client = libgio_loader.g_settings_new(kInterfaceSchema))) {
if (!SchemaExists(kInterfaceSchema) ||
!(client = g_settings_new(kInterfaceSchema))) {
VLOG(1) << "Cannot create gsettings client.";
return;
}
if (KeyExists(libgio_loader, client, kScaleFactor))
*scale_factor = libgio_loader.g_settings_get_uint(client, kScaleFactor);
if (KeyExists(client, kScaleFactor))
*scale_factor = g_settings_get_uint(client, kScaleFactor);
g_object_unref(client);
}

View File

@@ -4,12 +4,11 @@
#include "atom/browser/atom_browser_main_parts.h"
#import "atom/browser/mac/atom_application.h"
#import "atom/browser/mac/atom_application_delegate.h"
#include "base/files/file_path.h"
#import "base/mac/foundation_util.h"
#include "atom/browser/mac/atom_application.h"
#include "atom/browser/mac/atom_application_delegate.h"
#include "base/mac/bundle_locations.h"
#include "base/mac/foundation_util.h"
#include "ui/base/l10n/l10n_util_mac.h"
#import "vendor/brightray/common/mac/main_application_bundle.h"
namespace atom {
@@ -23,12 +22,7 @@ void AtomBrowserMainParts::PreMainMessageLoopStart() {
AtomApplicationDelegate* delegate = [[AtomApplicationDelegate alloc] init];
[NSApp setDelegate:(id<NSFileManagerDelegate>)delegate];
base::FilePath frameworkPath = brightray::MainApplicationBundlePath()
.Append("Contents")
.Append("Frameworks")
.Append(PRODUCT_NAME " Framework.framework");
NSBundle* frameworkBundle = [NSBundle
bundleWithPath:base::mac::FilePathToNSString(frameworkPath)];
NSBundle* frameworkBundle = base::mac::FrameworkBundle();
NSNib* mainNib = [[NSNib alloc] initWithNibNamed:@"MainMenu"
bundle:frameworkBundle];
[mainNib instantiateWithOwner:application topLevelObjects:nil];

View File

@@ -27,7 +27,6 @@ void AtomJavaScriptDialogManager::RunBeforeUnloadDialog(
const base::string16& message_text,
bool is_reload,
const DialogClosedCallback& callback) {
bool prevent_reload = message_text.empty() ||
message_text == base::ASCIIToUTF16("false");
callback.Run(!prevent_reload, message_text);

View File

@@ -30,7 +30,7 @@ class AtomJavaScriptDialogManager : public content::JavaScriptDialogManager {
const DialogClosedCallback& callback) override;
void CancelActiveAndPendingDialogs(
content::WebContents* web_contents) override {}
void WebContentsDestroyed(content::WebContents* web_contents) override {}
void ResetDialogState(content::WebContents* web_contents) override {};
};
} // namespace atom

View File

@@ -0,0 +1,24 @@
// Copyright (c) 2015 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "atom/browser/atom_quota_permission_context.h"
#include "storage/common/quota/quota_types.h"
namespace atom {
AtomQuotaPermissionContext::AtomQuotaPermissionContext() {
}
AtomQuotaPermissionContext::~AtomQuotaPermissionContext() {
}
void AtomQuotaPermissionContext::RequestQuotaPermission(
const content::StorageQuotaParams& params,
int render_process_id,
const PermissionCallback& callback) {
callback.Run(response::QUOTA_PERMISSION_RESPONSE_ALLOW);
}
} // namespace atom

View File

@@ -0,0 +1,31 @@
// Copyright (c) 2015 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef ATOM_BROWSER_ATOM_QUOTA_PERMISSION_CONTEXT_H_
#define ATOM_BROWSER_ATOM_QUOTA_PERMISSION_CONTEXT_H_
#include "content/public/browser/quota_permission_context.h"
namespace atom {
class AtomQuotaPermissionContext : public content::QuotaPermissionContext {
public:
typedef content::QuotaPermissionContext::QuotaPermissionResponse response;
AtomQuotaPermissionContext();
virtual ~AtomQuotaPermissionContext();
// content::QuotaPermissionContext:
void RequestQuotaPermission(
const content::StorageQuotaParams& params,
int render_process_id,
const PermissionCallback& callback) override;
private:
DISALLOW_COPY_AND_ASSIGN(AtomQuotaPermissionContext);
};
} // namespace atom
#endif // ATOM_BROWSER_ATOM_QUOTA_PERMISSION_CONTEXT_H_

View File

@@ -36,15 +36,21 @@ void RelaunchToInstallUpdate() {
// static
void AutoUpdater::SetFeedURL(const std::string& feed) {
if (g_updater == nil) {
// Initialize the SQRLUpdater.
NSURL* url = [NSURL URLWithString:base::SysUTF8ToNSString(feed)];
NSURLRequest* urlRequest = [NSURLRequest requestWithURL:url];
g_updater = [[SQRLUpdater alloc] initWithUpdateRequest:urlRequest];
AutoUpdaterDelegate* delegate = GetDelegate();
if (!delegate)
return;
// Initialize the SQRLUpdater.
NSURL* url = [NSURL URLWithString:base::SysUTF8ToNSString(feed)];
NSURLRequest* urlRequest = [NSURLRequest requestWithURL:url];
@try {
g_updater = [[SQRLUpdater alloc] initWithUpdateRequest:urlRequest];
} @catch (NSException* error) {
delegate->OnError(base::SysNSStringToUTF8(error.reason));
return;
}
[[g_updater rac_valuesForKeyPath:@"state" observer:g_updater]
subscribeNext:^(NSNumber *stateNumber) {
int state = [stateNumber integerValue];
@@ -88,7 +94,9 @@ void AutoUpdater::CheckForUpdates() {
delegate->OnUpdateNotAvailable();
}
} error:^(NSError *error) {
delegate->OnError(base::SysNSStringToUTF8(error.localizedDescription));
delegate->OnError(base::SysNSStringToUTF8(
[NSString stringWithFormat:@"%@: %@",
error.localizedDescription, error.localizedFailureReason]));
}];
}

View File

@@ -9,6 +9,7 @@
#include "atom/browser/native_window.h"
#include "atom/browser/window_list.h"
#include "atom/common/atom_version.h"
#include "brightray/common/application_info.h"
namespace atom {
@@ -31,11 +32,11 @@ void Browser::ClearRecentDocuments() {
}
std::string Browser::GetExecutableFileVersion() const {
return ATOM_VERSION_STRING;
return brightray::GetApplicationVersion();
}
std::string Browser::GetExecutableFileProductName() const {
return "Atom-Shell";
return brightray::GetApplicationName();
}
} // namespace atom

View File

@@ -4,13 +4,13 @@
#include "atom/browser/browser.h"
#import "atom/browser/mac/atom_application.h"
#import "atom/browser/mac/atom_application_delegate.h"
#include "atom/browser/mac/atom_application.h"
#include "atom/browser/mac/atom_application_delegate.h"
#include "atom/browser/native_window.h"
#include "atom/browser/window_list.h"
#import "base/mac/bundle_locations.h"
#import "base/mac/foundation_util.h"
#include "base/mac/foundation_util.h"
#include "base/strings/sys_string_conversions.h"
#include "brightray/common/application_info.h"
namespace atom {
@@ -27,15 +27,11 @@ void Browser::ClearRecentDocuments() {
}
std::string Browser::GetExecutableFileVersion() const {
NSDictionary* infoDictionary = base::mac::OuterBundle().infoDictionary;
NSString *version = [infoDictionary objectForKey:@"CFBundleVersion"];
return base::SysNSStringToUTF8(version);
return brightray::GetApplicationVersion();
}
std::string Browser::GetExecutableFileProductName() const {
NSDictionary* infoDictionary = base::mac::OuterBundle().infoDictionary;
NSString *version = [infoDictionary objectForKey:@"CFBundleName"];
return base::SysNSStringToUTF8(version);
return brightray::GetApplicationName();
}
int Browser::DockBounce(BounceType type) {

View File

@@ -118,7 +118,7 @@ void Browser::SetUserTasks(const std::vector<UserTask>& tasks) {
}
void Browser::SetAppUserModelID(const std::string& name) {
app_user_model_id_ = base::string16(L"atom-shell.app.");
app_user_model_id_ = base::string16(L"electron.app.");
app_user_model_id_ += base::UTF8ToUTF16(name);
SetCurrentProcessExplicitAppUserModelID(app_user_model_id_.c_str());
}
@@ -142,7 +142,7 @@ std::string Browser::GetExecutableFileProductName() const {
return base::UTF16ToUTF8(version_info->product_name());
}
return "Atom-Shell";
return ATOM_PRODUCT_NAME;
}
} // namespace atom

View File

@@ -25,10 +25,10 @@ app.on('ready', function() {
if (process.platform == 'darwin') {
var template = [
{
label: 'Atom Shell',
label: 'Electron',
submenu: [
{
label: 'About Atom Shell',
label: 'About Electron',
selector: 'orderFrontStandardAboutPanel:'
},
{
@@ -42,7 +42,7 @@ app.on('ready', function() {
type: 'separator'
},
{
label: 'Hide Atom Shell',
label: 'Hide Electron',
accelerator: 'Command+H',
selector: 'hide:'
},
@@ -112,11 +112,12 @@ app.on('ready', function() {
click: function() { mainWindow.restart(); }
},
{
label: 'Enter Fullscreen',
click: function() { mainWindow.setFullScreen(true); }
label: 'Toggle Full Screen',
accelerator: 'Ctrl+Command+F',
click: function() { mainWindow.setFullScreen(!mainWindow.isFullScreen()); }
},
{
label: 'Toggle DevTools',
label: 'Toggle Developer Tools',
accelerator: 'Alt+Command+I',
click: function() { mainWindow.toggleDevTools(); }
},
@@ -144,6 +145,27 @@ app.on('ready', function() {
},
]
},
{
label: 'Help',
submenu: [
{
label: 'Learn More',
click: function() { require('shell').openExternal('http://electron.atom.io') }
},
{
label: 'Documentation',
click: function() { require('shell').openExternal('https://github.com/atom/electron/tree/master/docs#readme') }
},
{
label: 'Community Discussions',
click: function() { require('shell').openExternal('https://discuss.atom.io/c/electron') }
},
{
label: 'Search Issues',
click: function() { require('shell').openExternal('https://github.com/atom/electron/issues') }
}
]
}
];
menu = Menu.buildFromTemplate(template);
@@ -173,16 +195,38 @@ app.on('ready', function() {
click: function() { mainWindow.restart(); }
},
{
label: '&Enter Fullscreen',
click: function() { mainWindow.setFullScreen(true); }
label: 'Toggle &Full Screen',
accelerator: 'F11',
click: function() { mainWindow.setFullScreen(!mainWindow.isFullScreen()); }
},
{
label: '&Toggle DevTools',
label: 'Toggle &Developer Tools',
accelerator: 'Alt+Ctrl+I',
click: function() { mainWindow.toggleDevTools(); }
},
]
},
{
label: 'Help',
submenu: [
{
label: 'Learn More',
click: function() { require('shell').openExternal('http://electron.atom.io') }
},
{
label: 'Documentation',
click: function() { require('shell').openExternal('https://github.com/atom/electron/tree/master/docs#readme') }
},
{
label: 'Community Discussions',
click: function() { require('shell').openExternal('https://discuss.atom.io/c/electron') }
},
{
label: 'Search Issues',
click: function() { require('shell').openExternal('https://github.com/atom/electron/issues') }
}
]
}
];
menu = Menu.buildFromTemplate(template);

View File

@@ -1,6 +1,6 @@
<html>
<head>
<title>Atom Shell</title>
<title>Electron</title>
<style>
body {
color: #555;
@@ -72,19 +72,19 @@
};
</script>
<h2 style="-webkit-app-region: drag">Welcome to Atom Shell</h2>
<h2 style="-webkit-app-region: drag">Welcome to Electron</h2>
<p>
To run your app with atom-shell, execute the following command under your
To run your app with Electron, execute the following command under your
Console (or Terminal):
</p>
<script>document.write('<pre>' + command + '</pre>')</script>
<p>
The <code>path-to-your-app</code> should be the path to your own atom-shell
app, you can read the <a href='https://github.com/atom/atom-shell/blob/master/docs/tutorial/quick-start.md'>quick start</a>
guide in atom-shell's <a href='https://github.com/atom/atom-shell/blob/master/docs'>docs</a>
The <code>path-to-your-app</code> should be the path to your own Electron
app, you can read the <a href='https://github.com/atom/electron/blob/master/docs/tutorial/quick-start.md'>quick start</a>
guide in Electron's <a href='https://github.com/atom/electron/blob/master/docs'>docs</a>
on how to write one.
</p>

View File

@@ -11,11 +11,14 @@ app.on('window-all-closed', function() {
// Parse command line options.
var argv = process.argv.slice(1);
var option = { file: null, version: null, webdriver: null };
var option = { file: null, help: null, version: null, webdriver: null };
for (var i in argv) {
if (argv[i] == '--version' || argv[i] == '-v') {
option.version = true;
break;
} else if (argv[i] == '--help' || argv[i] == '-h') {
option.help = true;
break;
} else if (argv[i] == '--test-type=webdriver') {
option.webdriver = true;
} else if (argv[i][0] == '-') {
@@ -50,7 +53,7 @@ if (option.file && !option.webdriver) {
} catch(e) {
if (e.code == 'MODULE_NOT_FOUND') {
app.focus();
dialog.showErrorBox('Error opening app', 'The app provided is not a valid atom-shell app, please read the docs on how to write one:\nhttps://github.com/atom/atom-shell/tree/master/docs');
dialog.showErrorBox('Error opening app', 'The app provided is not a valid electron app, please read the docs on how to write one:\nhttps://github.com/atom/electron/tree/master/docs');
process.exit(1);
} else {
console.error('App threw an error when running', e);
@@ -58,7 +61,17 @@ if (option.file && !option.webdriver) {
}
}
} else if (option.version) {
console.log('v' + process.versions['atom-shell']);
console.log('v' + process.versions.electron);
process.exit(0);
} else if (option.help) {
var helpMessage = "Electron v" + process.versions.electron + " - Cross Platform Desktop Application Shell\n\n";
helpMessage += "Usage: electron [options] [path]\n\n";
helpMessage += "A path to an Electron application may be specified. The path must be to \n";
helpMessage += "an index.js file or to a folder containing a package.json or index.js file.\n\n";
helpMessage += "Options:\n";
helpMessage += " -h, --help Print this usage message.\n";
helpMessage += " -v, --version Print the version.";
console.log(helpMessage);
process.exit(0);
} else {
require('./default_app.js');

View File

@@ -1,6 +1,5 @@
{
"name": "atom-shell-default-app",
"productName": "Atom Shell Default App",
"version": "0.1.0",
"name": "electron",
"productName": "Electron",
"main": "main.js"
}

View File

@@ -4,10 +4,13 @@
#include "atom/browser/javascript_environment.h"
#include "gin/array_buffer.h"
namespace atom {
JavascriptEnvironment::JavascriptEnvironment()
: isolate_(isolate_holder_.isolate()),
: initialized_(Initialize()),
isolate_(isolate_holder_.isolate()),
isolate_scope_(isolate_),
locker_(isolate_),
handle_scope_(isolate_),
@@ -15,4 +18,11 @@ JavascriptEnvironment::JavascriptEnvironment()
context_scope_(v8::Local<v8::Context>::New(isolate_, context_)) {
}
bool JavascriptEnvironment::Initialize() {
gin::IsolateHolder::LoadV8Snapshot();
gin::IsolateHolder::Initialize(gin::IsolateHolder::kNonStrictMode,
gin::ArrayBufferAllocator::SharedInstance());
return true;
}
} // namespace atom

View File

@@ -20,6 +20,9 @@ class JavascriptEnvironment {
}
private:
bool Initialize();
bool initialized_;
gin::IsolateHolder isolate_holder_;
v8::Isolate* isolate_;
v8::Isolate::Scope isolate_scope_;

View File

@@ -8,12 +8,20 @@ supportedWebViewEvents = [
'did-frame-finish-load'
'did-start-loading'
'did-stop-loading'
'did-get-response-details'
'did-get-redirect-request'
'dom-ready'
'console-message'
'new-window'
'close'
'crashed'
'gpu-crashed'
'plugin-crashed'
'destroyed'
'page-title-set'
'page-favicon-updated'
'enter-html-full-screen'
'leave-html-full-screen'
]
nextInstanceId = 0
@@ -53,11 +61,13 @@ createGuest = (embedder, params) ->
min = width: params.minwidth, height: params.minheight
max = width: params.maxwidth, height: params.maxheight
@setAutoSize params.autosize, min, max
if params.src
if params.httpreferrer
@loadUrl params.src, {httpreferrer: params.httpreferrer}
else
@loadUrl params.src
opts = {}
opts.httpreferrer = params.httpreferrer if params.httpreferrer
opts.useragent = params.useragent if params.useragent
@loadUrl params.src, opts
if params.allowtransparency?
@setAllowTransparency params.allowtransparency

View File

@@ -1,22 +1,15 @@
fs = require 'fs'
path = require 'path'
module = require 'module'
util = require 'util'
Module = require 'module'
# We modified the original process.argv to let node.js load the atom.js,
# we need to restore it here.
process.argv.splice 1, 1
# Pick out switches appended by atom-shell.
startMark = process.argv.indexOf '--atom-shell-switches-start'
endMark = process.argv.indexOf '--atom-shell-switches-end'
# And --force-device-scale-factor on Linux.
endMark++ if process.platform is 'linux'
process.argv.splice startMark, endMark - startMark + 1
# Add browser/api/lib to require's search paths,
# which contains javascript part of Atom's built-in libraries.
globalPaths = module.globalPaths
# Add browser/api/lib to module search paths, which contains javascript part of
# Electron's built-in libraries.
globalPaths = Module.globalPaths
globalPaths.push path.resolve(__dirname, '..', 'api', 'lib')
# Import common settings.
@@ -88,6 +81,9 @@ if packageJson.desktopName?
else
app.setDesktopName "#{app.getName()}.desktop"
# Chrome 42 disables NPAPI plugins by default, reenable them here
app.commandLine.appendSwitch 'enable-npapi'
# Set the user path according to application's name.
app.setPath 'userData', path.join(app.getPath('appData'), app.getName())
app.setPath 'userCache', path.join(app.getPath('cache'), app.getName())
@@ -96,4 +92,4 @@ app.setPath 'userCache', path.join(app.getPath('cache'), app.getName())
require './chrome-extension'
# Finally load app's main.js and transfer control to C++.
module._load path.join(packagePath, packageJson.main), module, true
Module._load path.join(packagePath, packageJson.main), Module, true

View File

@@ -107,6 +107,9 @@ ipc.on 'ATOM_BROWSER_CURRENT_WINDOW', (event, guestInstanceId) ->
catch e
event.returnValue = errorToMeta e
ipc.on 'ATOM_BROWSER_CURRENT_WEB_CONTENTS', (event) ->
event.returnValue = valueToMeta event.sender, event.sender
ipc.on 'ATOM_BROWSER_CONSTRUCTOR', (event, id, args) ->
try
args = unwrapArgs event.sender, args

View File

@@ -18,6 +18,4 @@
// CrAppControlProtocol:
- (void)setHandlingSendEvent:(BOOL)handlingSendEvent;
- (IBAction)closeAllWindows:(id)sender;
@end

View File

@@ -4,9 +4,10 @@
#import "atom/browser/mac/atom_application.h"
#include "atom/browser/browser.h"
#include "base/auto_reset.h"
#include "base/strings/sys_string_conversions.h"
#include "atom/browser/browser.h"
#include "content/public/browser/browser_accessibility_state.h"
@implementation AtomApplication
@@ -35,10 +36,6 @@
andEventID:kAEGetURL];
}
- (IBAction)closeAllWindows:(id)sender {
atom::Browser::Get()->Quit();
}
- (void)handleURLEvent:(NSAppleEventDescriptor*)event
withReplyEvent:(NSAppleEventDescriptor*)replyEvent {
NSString* url = [
@@ -46,4 +43,23 @@
atom::Browser::Get()->OpenURL(base::SysNSStringToUTF8(url));
}
- (void)accessibilitySetValue:(id)value forAttribute:(NSString *)attribute {
// Undocumented attribute that VoiceOver happens to set while running.
// Chromium uses this too, even though it's not exactly right.
if ([attribute isEqualToString:@"AXEnhancedUserInterface"]) {
[self updateAccessibilityEnabled:[value boolValue]];
}
return [super accessibilitySetValue:value forAttribute:attribute];
}
- (void)updateAccessibilityEnabled:(BOOL)enabled {
auto ax_state = content::BrowserAccessibilityState::GetInstance();
if (enabled) {
ax_state->OnScreenReaderDetected();
} else {
ax_state->DisableAccessibility();
}
}
@end

View File

@@ -54,8 +54,9 @@
#include "ui/gfx/geometry/size_conversions.h"
#include "ui/gfx/geometry/point.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/screen.h"
#include "ui/gfx/geometry/size.h"
#include "ui/gfx/screen.h"
#include "ui/gl/gpu_switching_manager.h"
#if defined(OS_WIN)
#include "ui/gfx/switches.h"
@@ -65,10 +66,6 @@ using content::NavigationEntry;
using content::RenderWidgetHostView;
using content::RenderWidgetHost;
namespace content {
CONTENT_EXPORT extern bool g_use_transparent_window;
}
namespace atom {
namespace {
@@ -77,6 +74,7 @@ namespace {
const char* kWebRuntimeFeatures[] = {
switches::kExperimentalFeatures,
switches::kExperimentalCanvasFeatures,
switches::kSubpixelFontScaling,
switches::kOverlayScrollbars,
switches::kOverlayFullscreenVideo,
switches::kSharedWorker,
@@ -101,6 +99,8 @@ NativeWindow::NativeWindow(content::WebContents* web_contents,
is_closed_(false),
node_integration_(true),
has_dialog_attached_(false),
html_fullscreen_(false),
native_fullscreen_(false),
zoom_factor_(1.0),
weak_factory_(this),
inspectable_web_contents_(
@@ -114,7 +114,7 @@ NativeWindow::NativeWindow(content::WebContents* web_contents,
// Tell the content module to initialize renderer widget with transparent
// mode.
content::g_use_transparent_window = transparent_;
ui::GpuSwitchingManager::SetTransparent(transparent_);
// Read icon before window is created.
options.Get(switches::kIcon, &icon_);
@@ -146,7 +146,7 @@ NativeWindow::NativeWindow(content::WebContents* web_contents,
// Override the user agent to contain application and atom-shell's version.
Browser* browser = Browser::Get();
std::string product_name = base::StringPrintf(
"%s/%s Chrome/%s AtomShell/" ATOM_VERSION_STRING,
"%s/%s Chrome/%s " ATOM_PRODUCT_NAME "/" ATOM_VERSION_STRING,
RemoveWhitespace(browser->GetName()).c_str(),
browser->GetVersion().c_str(),
CHROME_VERSION_STRING);
@@ -171,18 +171,13 @@ NativeWindow* NativeWindow::Create(const mate::Dictionary& options) {
}
// static
NativeWindow* NativeWindow::FromRenderView(int process_id, int routing_id) {
// Stupid iterating.
NativeWindow* NativeWindow::FromWebContents(
content::WebContents* web_contents) {
WindowList& window_list = *WindowList::GetInstance();
for (auto w = window_list.begin(); w != window_list.end(); ++w) {
auto& window = *w;
content::WebContents* web_contents = window->GetWebContents();
int window_process_id = web_contents->GetRenderProcessHost()->GetID();
int window_routing_id = web_contents->GetRoutingID();
if (window_routing_id == routing_id && window_process_id == process_id)
for (NativeWindow* window : window_list) {
if (window->GetWebContents() == web_contents)
return window;
}
return nullptr;
}
@@ -194,7 +189,7 @@ void NativeWindow::InitFromOptions(const mate::Dictionary& options) {
int width = -1, height = -1;
options.Get(switches::kWidth, &width);
options.Get(switches::kHeight, &height);
Move(gfx::Rect(x, y, width, height));
SetBounds(gfx::Rect(x, y, width, height));
} else if (options.Get(switches::kCenter, &center) && center) {
Center();
}
@@ -203,8 +198,8 @@ void NativeWindow::InitFromOptions(const mate::Dictionary& options) {
options.Get(switches::kMinWidth, &min_width)) {
SetMinimumSize(gfx::Size(min_width, min_height));
}
int max_height = -1, max_width = -1;
if (options.Get(switches::kMaxHeight, &max_height) &&
int max_height = INT_MAX, max_width = INT_MAX;
if (options.Get(switches::kMaxHeight, &max_height) |
options.Get(switches::kMaxWidth, &max_width)) {
SetMaximumSize(gfx::Size(max_width, max_height));
}
@@ -228,7 +223,7 @@ void NativeWindow::InitFromOptions(const mate::Dictionary& options) {
if (options.Get(switches::kKiosk, &kiosk) && kiosk) {
SetKiosk(kiosk);
}
std::string title("Atom Shell");
std::string title("Electron");
options.Get(switches::kTitle, &title);
SetTitle(title);
@@ -239,6 +234,22 @@ void NativeWindow::InitFromOptions(const mate::Dictionary& options) {
Show();
}
void NativeWindow::SetSize(const gfx::Size& size) {
SetBounds(gfx::Rect(GetPosition(), size));
}
gfx::Size NativeWindow::GetSize() {
return GetBounds().size();
}
void NativeWindow::SetPosition(const gfx::Point& position) {
SetBounds(gfx::Rect(position, GetSize()));
}
gfx::Point NativeWindow::GetPosition() {
return GetBounds().origin();
}
void NativeWindow::SetRepresentedFilename(const std::string& filename) {
}
@@ -283,7 +294,8 @@ bool NativeWindow::HasModalDialog() {
return has_dialog_attached_;
}
void NativeWindow::OpenDevTools() {
void NativeWindow::OpenDevTools(bool can_dock) {
inspectable_web_contents()->SetCanDock(can_dock);
inspectable_web_contents()->ShowDevTools();
}
@@ -296,12 +308,23 @@ bool NativeWindow::IsDevToolsOpened() {
}
void NativeWindow::InspectElement(int x, int y) {
OpenDevTools();
OpenDevTools(true);
scoped_refptr<content::DevToolsAgentHost> agent(
content::DevToolsAgentHost::GetOrCreateFor(GetWebContents()));
agent->InspectElement(x, y);
}
void NativeWindow::InspectServiceWorker() {
for (const auto& agent_host : content::DevToolsAgentHost::GetOrCreateAll()) {
if (agent_host->GetType() ==
content::DevToolsAgentHost::TYPE_SERVICE_WORKER) {
OpenDevTools(true);
inspectable_web_contents()->AttachTo(agent_host);
break;
}
}
}
void NativeWindow::FocusOnWebView() {
GetWebContents()->GetRenderViewHost()->Focus();
}
@@ -322,7 +345,7 @@ void NativeWindow::CapturePage(const gfx::Rect& rect,
RenderWidgetHostView* const view = contents->GetRenderWidgetHostView();
RenderWidgetHost* const host = view ? view->GetRenderWidgetHost() : nullptr;
if (!view || !host) {
callback.Run(std::vector<unsigned char>());
callback.Run(SkBitmap());
return;
}
@@ -436,8 +459,7 @@ void NativeWindow::AppendExtraCommandLineSwitches(
}
}
void NativeWindow::OverrideWebkitPrefs(const GURL& url,
content::WebPreferences* prefs) {
void NativeWindow::OverrideWebkitPrefs(content::WebPreferences* prefs) {
if (web_preferences_.IsEmpty())
return;
@@ -458,11 +480,34 @@ void NativeWindow::OverrideWebkitPrefs(const GURL& url,
if (web_preferences_.Get("webaudio", &b))
prefs->webaudio_enabled = b;
if (web_preferences_.Get("extra-plugin-dirs", &list)) {
for (size_t i = 0; i < list.size(); ++i)
content::PluginService::GetInstance()->AddExtraPluginDir(list[i]);
if (content::PluginService::GetInstance()->NPAPIPluginsSupported()) {
for (size_t i = 0; i < list.size(); ++i)
content::PluginService::GetInstance()->AddExtraPluginDir(list[i]);
} else {
LOG(WARNING) << "NPAPI plugins not supported on this platform";
}
}
}
void NativeWindow::SetHtmlApiFullscreen(bool enter_fullscreen) {
// Window is already in fullscreen mode, save the state.
if (enter_fullscreen && IsFullscreen()) {
native_fullscreen_ = true;
html_fullscreen_ = true;
return;
}
// Exit html fullscreen state but not window's fullscreen mode.
if (!enter_fullscreen && native_fullscreen_) {
html_fullscreen_ = false;
return;
}
SetFullScreen(enter_fullscreen);
html_fullscreen_ = enter_fullscreen;
native_fullscreen_ = false;
}
void NativeWindow::NotifyWindowClosed() {
if (is_closed_)
return;
@@ -501,6 +546,18 @@ void NativeWindow::NotifyWindowRestore() {
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnWindowRestore());
}
void NativeWindow::NotifyWindowResize() {
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnWindowResize());
}
void NativeWindow::NotifyWindowMove() {
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnWindowMove());
}
void NativeWindow::NotifyWindowMoved() {
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnWindowMoved());
}
void NativeWindow::NotifyWindowEnterFullScreen() {
FOR_EACH_OBSERVER(NativeWindowObserver, observers_,
OnWindowEnterFullScreen());
@@ -511,6 +568,16 @@ void NativeWindow::NotifyWindowLeaveFullScreen() {
OnWindowLeaveFullScreen());
}
void NativeWindow::NotifyWindowEnterHtmlFullScreen() {
FOR_EACH_OBSERVER(NativeWindowObserver, observers_,
OnWindowEnterHtmlFullScreen());
}
void NativeWindow::NotifyWindowLeaveHtmlFullScreen() {
FOR_EACH_OBSERVER(NativeWindowObserver, observers_,
OnWindowLeaveHtmlFullScreen());
}
bool NativeWindow::ShouldCreateWebContents(
content::WebContents* web_contents,
int route_id,
@@ -563,6 +630,7 @@ content::WebContents* NativeWindow::OpenURLFromTab(
load_url_params.is_renderer_initiated = params.is_renderer_initiated;
load_url_params.transferred_global_request_id =
params.transferred_global_request_id;
load_url_params.should_clear_history_list = true;
source->GetController().LoadURLWithParams(load_url_params);
return source;
@@ -643,8 +711,7 @@ void NativeWindow::DeactivateContents(content::WebContents* contents) {
void NativeWindow::MoveContents(content::WebContents* source,
const gfx::Rect& pos) {
SetPosition(pos.origin());
SetSize(pos.size());
SetBounds(pos);
}
void NativeWindow::CloseContents(content::WebContents* source) {
@@ -683,6 +750,20 @@ void NativeWindow::RendererResponsive(content::WebContents* source) {
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnRendererResponsive());
}
void NativeWindow::EnterFullscreenModeForTab(content::WebContents* source,
const GURL& origin) {
SetHtmlApiFullscreen(true);
}
void NativeWindow::ExitFullscreenModeForTab(content::WebContents* source) {
SetHtmlApiFullscreen(false);
}
bool NativeWindow::IsFullscreenForTabOrPending(
const content::WebContents* source) const {
return is_html_api_fullscreen();
}
void NativeWindow::BeforeUnloadFired(const base::TimeTicks& proceed_time) {
// Do nothing, we override this method just to avoid compilation error since
// there are two virtual functions named BeforeUnloadFired.
@@ -756,6 +837,10 @@ void NativeWindow::DevToolsAppendToFile(const std::string& url,
CallDevToolsFunction("DevToolsAPI.appendedToURL", &url_value);
}
void NativeWindow::DevToolsFocused() {
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnDevToolsFocus());
}
void NativeWindow::ScheduleUnresponsiveEvent(int ms) {
if (!window_unresposive_closure_.IsCancelled())
return;
@@ -781,11 +866,7 @@ void NativeWindow::NotifyWindowUnresponsive() {
void NativeWindow::OnCapturePageDone(const CapturePageCallback& callback,
const SkBitmap& bitmap,
content::ReadbackResponse response) {
SkAutoLockPixels screen_capture_lock(bitmap);
std::vector<unsigned char> data;
if (response == content::READBACK_SUCCESS)
gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, true, &data);
callback.Run(data);
callback.Run(bitmap);
}
void NativeWindow::CallDevToolsFunction(const std::string& function_name,

View File

@@ -59,8 +59,7 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
public content::WebContentsObserver,
public content::NotificationObserver {
public:
typedef base::Callback<void(const std::vector<unsigned char>& buffer)>
CapturePageCallback;
typedef base::Callback<void(const SkBitmap& bitmap)> CapturePageCallback;
class DialogScope {
public:
@@ -92,14 +91,13 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
// managing the window's live.
static NativeWindow* Create(const mate::Dictionary& options);
// Find a window from its process id and routing id.
static NativeWindow* FromRenderView(int process_id, int routing_id);
// Find a window from its WebContents
static NativeWindow* FromWebContents(content::WebContents* web_contents);
void InitFromOptions(const mate::Dictionary& options);
virtual void Close() = 0;
virtual void CloseImmediately() = 0;
virtual void Move(const gfx::Rect& pos) = 0;
virtual void Focus(bool focus) = 0;
virtual bool IsFocused() = 0;
virtual void Show() = 0;
@@ -113,9 +111,13 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
virtual void Restore() = 0;
virtual bool IsMinimized() = 0;
virtual void SetFullScreen(bool fullscreen) = 0;
virtual bool IsFullscreen() = 0;
virtual void SetSize(const gfx::Size& size) = 0;
virtual gfx::Size GetSize() = 0;
virtual bool IsFullscreen() const = 0;
virtual void SetBounds(const gfx::Rect& bounds) = 0;
virtual gfx::Rect GetBounds() = 0;
virtual void SetSize(const gfx::Size& size);
virtual gfx::Size GetSize();
virtual void SetPosition(const gfx::Point& position);
virtual gfx::Point GetPosition();
virtual void SetContentSize(const gfx::Size& size) = 0;
virtual gfx::Size GetContentSize() = 0;
virtual void SetMinimumSize(const gfx::Size& size) = 0;
@@ -127,8 +129,6 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
virtual void SetAlwaysOnTop(bool top) = 0;
virtual bool IsAlwaysOnTop() = 0;
virtual void Center() = 0;
virtual void SetPosition(const gfx::Point& position) = 0;
virtual gfx::Point GetPosition() = 0;
virtual void SetTitle(const std::string& title) = 0;
virtual std::string GetTitle() = 0;
virtual void FlashFrame(bool flash) = 0;
@@ -145,12 +145,15 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
virtual void SetProgressBar(double progress) = 0;
virtual void SetOverlayIcon(const gfx::Image& overlay,
const std::string& description) = 0;
virtual void SetVisibleOnAllWorkspaces(bool visible) = 0;
virtual bool IsVisibleOnAllWorkspaces() = 0;
virtual bool IsClosed() const { return is_closed_; }
virtual void OpenDevTools();
virtual void OpenDevTools(bool can_dock);
virtual void CloseDevTools();
virtual bool IsDevToolsOpened();
virtual void InspectElement(int x, int y);
virtual void InspectServiceWorker();
virtual void FocusOnWebView();
virtual void BlurWebView();
@@ -191,7 +194,10 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
// Called when renderer process is going to be started.
void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
int child_process_id);
void OverrideWebkitPrefs(const GURL& url, content::WebPreferences* prefs);
void OverrideWebkitPrefs(content::WebPreferences* prefs);
// Set fullscreen mode triggered by html api.
void SetHtmlApiFullscreen(bool enter_fullscreen);
// Public API used by platform-dependent delegates and observers to send UI
// related notifications.
@@ -202,8 +208,13 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
void NotifyWindowUnmaximize();
void NotifyWindowMinimize();
void NotifyWindowRestore();
void NotifyWindowMove();
void NotifyWindowResize();
void NotifyWindowMoved();
void NotifyWindowEnterFullScreen();
void NotifyWindowLeaveFullScreen();
void NotifyWindowEnterHtmlFullScreen();
void NotifyWindowLeaveHtmlFullScreen();
void AddObserver(NativeWindowObserver* obs) {
observers_.AddObserver(obs);
@@ -215,6 +226,8 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
bool has_frame() const { return has_frame_; }
bool is_html_api_fullscreen() const { return html_fullscreen_; }
void set_has_dialog_attached(bool has_dialog_attached) {
has_dialog_attached_ = has_dialog_attached;
}
@@ -272,6 +285,11 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
const content::WebContents* source) const override;
void RendererUnresponsive(content::WebContents* source) override;
void RendererResponsive(content::WebContents* source) override;
void EnterFullscreenModeForTab(content::WebContents* source,
const GURL& origin) override;
void ExitFullscreenModeForTab(content::WebContents* source) override;
bool IsFullscreenForTabOrPending(
const content::WebContents* source) const override;
// Implementations of content::WebContentsObserver.
void RenderViewCreated(content::RenderViewHost* render_view_host) override;
@@ -289,6 +307,7 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
bool save_as) override;
void DevToolsAppendToFile(const std::string& url,
const std::string& content) override;
void DevToolsFocused() override;
// Whether window has standard frame.
bool has_frame_;
@@ -335,6 +354,12 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
// There is a dialog that has been attached to window.
bool has_dialog_attached_;
// Whether window is fullscreened by HTML5 api.
bool html_fullscreen_;
// Whether window is fullscreened by window api.
bool native_fullscreen_;
// Closure that would be called when window is unresponsive when closing,
// it should be cancelled when we can prove that the window is responsive.
base::CancelableClosure window_unresposive_closure_;

View File

@@ -14,6 +14,8 @@
#include "base/memory/scoped_ptr.h"
#include "atom/browser/native_window.h"
@class AtomNSWindow;
@class AtomNSWindowDelegate;
@class FullSizeContentView;
class SkRegion;
@@ -28,7 +30,6 @@ class NativeWindowMac : public NativeWindow {
// NativeWindow implementation.
void Close() override;
void CloseImmediately() override;
void Move(const gfx::Rect& pos) override;
void Focus(bool focus) override;
bool IsFocused() override;
void Show() override;
@@ -42,9 +43,9 @@ class NativeWindowMac : public NativeWindow {
void Restore() override;
bool IsMinimized() override;
void SetFullScreen(bool fullscreen) override;
bool IsFullscreen() override;
void SetSize(const gfx::Size& size) override;
gfx::Size GetSize() override;
bool IsFullscreen() const override;
void SetBounds(const gfx::Rect& bounds) override;
gfx::Rect GetBounds() override;
void SetContentSize(const gfx::Size& size) override;
gfx::Size GetContentSize() override;
void SetMinimumSize(const gfx::Size& size) override;
@@ -56,8 +57,6 @@ class NativeWindowMac : public NativeWindow {
void SetAlwaysOnTop(bool top) override;
bool IsAlwaysOnTop() override;
void Center() override;
void SetPosition(const gfx::Point& position) override;
gfx::Point GetPosition() override;
void SetTitle(const std::string& title) override;
std::string GetTitle() override;
void FlashFrame(bool flash) override;
@@ -75,6 +74,9 @@ class NativeWindowMac : public NativeWindow {
const std::string& description) override;
void ShowDefinitionForSelection() override;
void SetVisibleOnAllWorkspaces(bool visible) override;
bool IsVisibleOnAllWorkspaces() override;
// Returns true if |point| in local Cocoa coordinate system falls within
// the draggable region.
bool IsWithinDraggableRegion(NSPoint point) const;
@@ -102,7 +104,8 @@ class NativeWindowMac : public NativeWindow {
// whehter we can drag.
void InstallDraggableRegionView();
base::scoped_nsobject<NSWindow> window_;
base::scoped_nsobject<AtomNSWindow> window_;
base::scoped_nsobject<AtomNSWindowDelegate> window_delegate_;
// The view that will fill the whole frameless window.
base::scoped_nsobject<FullSizeContentView> content_view_;

View File

@@ -11,13 +11,14 @@
#include "atom/common/options_switches.h"
#include "base/mac/mac_util.h"
#include "base/strings/sys_string_conversions.h"
#include "brightray/browser/inspectable_web_contents.h"
#include "brightray/browser/inspectable_web_contents_view.h"
#include "content/public/browser/browser_accessibility_state.h"
#include "content/public/browser/native_web_keyboard_event.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/render_widget_host_view.h"
#include "native_mate/dictionary.h"
#include "vendor/brightray/browser/inspectable_web_contents.h"
#include "vendor/brightray/browser/inspectable_web_contents_view.h"
static const CGFloat kAtomWindowCornerRadius = 4.0;
@@ -53,10 +54,8 @@ static const CGFloat kAtomWindowCornerRadius = 4.0;
@interface AtomNSWindowDelegate : NSObject<NSWindowDelegate> {
@private
atom::NativeWindowMac* shell_;
BOOL acceptsFirstMouse_;
}
- (id)initWithShell:(atom::NativeWindowMac*)shell;
- (void)setAcceptsFirstMouse:(BOOL)accept;
@end
@implementation AtomNSWindowDelegate
@@ -64,15 +63,10 @@ static const CGFloat kAtomWindowCornerRadius = 4.0;
- (id)initWithShell:(atom::NativeWindowMac*)shell {
if ((self = [super init])) {
shell_ = shell;
acceptsFirstMouse_ = NO;
}
return self;
}
- (void)setAcceptsFirstMouse:(BOOL)accept {
acceptsFirstMouse_ = accept;
}
- (void)windowDidBecomeMain:(NSNotification*)notification {
content::WebContents* web_contents = shell_->GetWebContents();
if (!web_contents)
@@ -104,6 +98,15 @@ static const CGFloat kAtomWindowCornerRadius = 4.0;
- (void)windowDidResize:(NSNotification*)notification {
if (!shell_->has_frame())
shell_->ClipWebView();
shell_->NotifyWindowResize();
}
- (void)windowDidMove:(NSNotification*)notification {
// TODO(zcbenz): Remove the alias after figuring out a proper
// way to disptach move.
shell_->NotifyWindowMove();
shell_->NotifyWindowMoved();
}
- (void)windowDidMiniaturize:(NSNotification*)notification {
@@ -140,7 +143,6 @@ static const CGFloat kAtomWindowCornerRadius = 4.0;
- (void)windowWillClose:(NSNotification*)notification {
shell_->NotifyWindowClosed();
[self autorelease];
}
- (BOOL)windowShouldClose:(id)window {
@@ -151,10 +153,6 @@ static const CGFloat kAtomWindowCornerRadius = 4.0;
return NO;
}
- (BOOL)acceptsFirstMouse:(NSEvent*)event {
return acceptsFirstMouse_;
}
@end
@interface AtomNSWindow : EventProcessingWindow {
@@ -162,6 +160,8 @@ static const CGFloat kAtomWindowCornerRadius = 4.0;
atom::NativeWindowMac* shell_;
bool enable_larger_than_screen_;
}
@property BOOL acceptsFirstMouse;
@property BOOL disableAutoHideCursor;
- (void)setShell:(atom::NativeWindowMac*)shell;
- (void)setEnableLargerThanScreen:(bool)enable;
@end
@@ -184,28 +184,24 @@ static const CGFloat kAtomWindowCornerRadius = 4.0;
return [super constrainFrameRect:frameRect toScreen:screen];
}
- (IBAction)reload:(id)sender {
content::WebContents* web_contents = shell_->GetWebContents();
content::NavigationController::LoadURLParams params(web_contents->GetURL());
web_contents->GetController().LoadURLWithParams(params);
}
- (IBAction)showDevTools:(id)sender {
shell_->OpenDevTools();
}
// Returns an empty array for AXChildren attribute, this will force the
// SpeechSynthesisServer to use its classical way of speaking the selected text:
// by invoking the "Command+C" for current application and then speak out
// what's in the clipboard. Otherwise the "Text to Speech" would always speak
// out window's title.
// This behavior is taken by both FireFox and Chrome, see also FireFox's bug on
// more of how SpeechSynthesisServer chose which text to read:
// https://bugzilla.mozilla.org/show_bug.cgi?id=674612
- (id)accessibilityAttributeValue:(NSString*)attribute {
if ([attribute isEqualToString:@"AXChildren"])
return [NSArray array];
return [super accessibilityAttributeValue:attribute];
if (![attribute isEqualToString:@"AXChildren"])
return [super accessibilityAttributeValue:attribute];
// Filter out objects that aren't the title bar buttons. This has the effect
// of removing the window title, which VoiceOver already sees.
// * when VoiceOver is disabled, this causes Cmd+C to be used for TTS but
// still leaves the buttons available in the accessibility tree.
// * when VoiceOver is enabled, the full accessibility tree is used.
// Without removing the title and with VO disabled, the TTS would always read
// the window title instead of using Cmd+C to get the selected text.
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"(self isKindOfClass: %@) OR (self.className == %@)",
[NSButtonCell class],
@"RenderWidgetHostViewCocoa"];
NSArray *children = [super accessibilityAttributeValue:attribute];
return [children filteredArrayUsingPredicate:predicate];
}
@end
@@ -243,6 +239,10 @@ static const CGFloat kAtomWindowCornerRadius = 4.0;
shellWindow_->HandleMouseEvent(event);
}
- (BOOL)acceptsFirstMouse:(NSEvent*)event {
return YES;
}
@end
@interface AtomProgressBar : NSProgressIndicator
@@ -319,21 +319,25 @@ NativeWindowMac::NativeWindowMac(content::WebContents* web_contents,
width,
height);
AtomNSWindow* atomWindow = [[AtomNSWindow alloc]
bool useStandardWindow = true;
options.Get(switches::kStandardWindow, &useStandardWindow);
NSUInteger styleMask = NSTitledWindowMask | NSClosableWindowMask |
NSMiniaturizableWindowMask | NSResizableWindowMask;
if (!useStandardWindow || transparent_ || !has_frame_) {
styleMask |= NSTexturedBackgroundWindowMask;
}
window_.reset([[AtomNSWindow alloc]
initWithContentRect:cocoa_bounds
styleMask:NSTitledWindowMask | NSClosableWindowMask |
NSMiniaturizableWindowMask | NSResizableWindowMask |
NSTexturedBackgroundWindowMask
styleMask:styleMask
backing:NSBackingStoreBuffered
defer:YES];
defer:YES]);
[window_ setShell:this];
[window_ setEnableLargerThanScreen:enable_larger_than_screen_];
[atomWindow setShell:this];
[atomWindow setEnableLargerThanScreen:enable_larger_than_screen_];
window_.reset(atomWindow);
AtomNSWindowDelegate* delegate =
[[AtomNSWindowDelegate alloc] initWithShell:this];
[window_ setDelegate:delegate];
window_delegate_.reset([[AtomNSWindowDelegate alloc] initWithShell:this]);
[window_ setDelegate:window_delegate_];
if (transparent_) {
// Make window has transparent background.
@@ -342,6 +346,10 @@ NativeWindowMac::NativeWindowMac(content::WebContents* web_contents,
[window_ setBackgroundColor:[NSColor clearColor]];
}
// Remove non-transparent corners, see http://git.io/vfonD.
if (!has_frame_)
[window_ setOpaque:NO];
// We will manage window's lifetime ourselves.
[window_ setReleasedWhenClosed:NO];
@@ -354,7 +362,12 @@ NativeWindowMac::NativeWindowMac(content::WebContents* web_contents,
// Enable the NSView to accept first mouse event.
bool acceptsFirstMouse = false;
options.Get(switches::kAcceptFirstMouse, &acceptsFirstMouse);
[delegate setAcceptsFirstMouse:acceptsFirstMouse];
[window_ setAcceptsFirstMouse:acceptsFirstMouse];
// Disable auto-hiding cursor.
bool disableAutoHideCursor = false;
options.Get(switches::kDisableAutoHideCursor, &disableAutoHideCursor);
[window_ setDisableAutoHideCursor:disableAutoHideCursor];
// Disable fullscreen button when 'fullscreen' is specified to false.
bool fullscreen;
@@ -385,18 +398,6 @@ void NativeWindowMac::CloseImmediately() {
[window_ close];
}
void NativeWindowMac::Move(const gfx::Rect& pos) {
NSRect cocoa_bounds = NSMakeRect(pos.x(), 0,
pos.width(),
pos.height());
// Flip coordinates based on the primary screen.
NSScreen* screen = [[NSScreen screens] objectAtIndex:0];
cocoa_bounds.origin.y =
NSHeight([screen frame]) - pos.height() - pos.y();
[window_ setFrame:cocoa_bounds display:YES];
}
void NativeWindowMac::Focus(bool focus) {
if (!IsVisible())
return;
@@ -469,22 +470,28 @@ void NativeWindowMac::SetFullScreen(bool fullscreen) {
[window_ toggleFullScreen:nil];
}
bool NativeWindowMac::IsFullscreen() {
bool NativeWindowMac::IsFullscreen() const {
return [window_ styleMask] & NSFullScreenWindowMask;
}
void NativeWindowMac::SetSize(const gfx::Size& size) {
NSRect frame = [window_ frame];
frame.origin.y -= size.height() - frame.size.height;
frame.size.width = size.width();
frame.size.height = size.height();
void NativeWindowMac::SetBounds(const gfx::Rect& bounds) {
NSRect cocoa_bounds = NSMakeRect(bounds.x(), 0,
bounds.width(),
bounds.height());
// Flip coordinates based on the primary screen.
NSScreen* screen = [[NSScreen screens] objectAtIndex:0];
cocoa_bounds.origin.y =
NSHeight([screen frame]) - bounds.height() - bounds.y();
[window_ setFrame:frame display:YES];
[window_ setFrame:cocoa_bounds display:YES];
}
gfx::Size NativeWindowMac::GetSize() {
gfx::Rect NativeWindowMac::GetBounds() {
NSRect frame = [window_ frame];
return gfx::Size(frame.size.width, frame.size.height);
gfx::Rect bounds(frame.origin.x, 0, NSWidth(frame), NSHeight(frame));
NSScreen* screen = [[NSScreen screens] objectAtIndex:0];
bounds.set_y(NSHeight([screen frame]) - NSMaxY(frame));
return bounds;
}
void NativeWindowMac::SetContentSize(const gfx::Size& size) {
@@ -557,18 +564,6 @@ void NativeWindowMac::Center() {
[window_ center];
}
void NativeWindowMac::SetPosition(const gfx::Point& position) {
Move(gfx::Rect(position, GetSize()));
}
gfx::Point NativeWindowMac::GetPosition() {
NSRect frame = [window_ frame];
NSScreen* screen = [[NSScreen screens] objectAtIndex:0];
return gfx::Point(frame.origin.x,
NSHeight([screen frame]) - frame.origin.y - frame.size.height);
}
void NativeWindowMac::SetTitle(const std::string& title) {
// We don't want the title to show in transparent window.
if (transparent_)
@@ -692,6 +687,21 @@ void NativeWindowMac::ShowDefinitionForSelection() {
rwhv->ShowDefinitionForSelection();
}
void NativeWindowMac::SetVisibleOnAllWorkspaces(bool visible) {
NSUInteger collectionBehavior = [window_ collectionBehavior];
if (visible) {
collectionBehavior |= NSWindowCollectionBehaviorCanJoinAllSpaces;
} else {
collectionBehavior &= ~NSWindowCollectionBehaviorCanJoinAllSpaces;
}
[window_ setCollectionBehavior:collectionBehavior];
}
bool NativeWindowMac::IsVisibleOnAllWorkspaces() {
NSUInteger collectionBehavior = [window_ collectionBehavior];
return collectionBehavior & NSWindowCollectionBehaviorCanJoinAllSpaces;
}
bool NativeWindowMac::IsWithinDraggableRegion(NSPoint point) const {
if (!draggable_region_)
return false;
@@ -739,7 +749,7 @@ void NativeWindowMac::HandleKeyboardEvent(
event.type == content::NativeWebKeyboardEvent::Char)
return;
if (event.os_event.window == window_) {
if (event.os_event.window == window_.get()) {
EventProcessingWindow* event_window =
static_cast<EventProcessingWindow*>(window_);
DCHECK([event_window isKindOfClass:[EventProcessingWindow class]]);
@@ -805,7 +815,10 @@ void NativeWindowMac::UninstallView() {
}
void NativeWindowMac::ClipWebView() {
NSView* webView = GetWebContents()->GetNativeView();
content::WebContents* web_contents = GetWebContents();
if (!web_contents)
return;
NSView* webView = web_contents->GetNativeView();
webView.layer.masksToBounds = YES;
webView.layer.cornerRadius = kAtomWindowCornerRadius;
}

View File

@@ -47,8 +47,16 @@ class NativeWindowObserver {
virtual void OnWindowUnmaximize() {}
virtual void OnWindowMinimize() {}
virtual void OnWindowRestore() {}
virtual void OnWindowResize() {}
virtual void OnWindowMove() {}
virtual void OnWindowMoved() {}
virtual void OnWindowEnterFullScreen() {}
virtual void OnWindowLeaveFullScreen() {}
virtual void OnWindowEnterHtmlFullScreen() {}
virtual void OnWindowLeaveHtmlFullScreen() {}
// Called when devtools window gets focused.
virtual void OnDevToolsFocus() {}
// Called when renderer is hung.
virtual void OnRendererUnresponsive() {}

View File

@@ -176,6 +176,7 @@ NativeWindowViews::NativeWindowViews(content::WebContents* web_contents,
options.Get(switches::kWidth, &width);
options.Get(switches::kHeight, &height);
gfx::Rect bounds(0, 0, width, height);
widget_size_ = bounds.size();
window_->AddObserver(this);
@@ -291,10 +292,6 @@ void NativeWindowViews::CloseImmediately() {
window_->CloseNow();
}
void NativeWindowViews::Move(const gfx::Rect& bounds) {
window_->SetBounds(bounds);
}
void NativeWindowViews::Focus(bool focus) {
if (focus)
window_->Activate();
@@ -307,7 +304,7 @@ bool NativeWindowViews::IsFocused() {
}
void NativeWindowViews::Show() {
window_->Show();
window_->native_widget_private()->ShowWithWindowState(GetRestoredState());
}
void NativeWindowViews::ShowInactive() {
@@ -369,40 +366,41 @@ void NativeWindowViews::SetFullScreen(bool fullscreen) {
#endif
}
bool NativeWindowViews::IsFullscreen() {
bool NativeWindowViews::IsFullscreen() const {
return window_->IsFullscreen();
}
void NativeWindowViews::SetSize(const gfx::Size& size) {
void NativeWindowViews::SetBounds(const gfx::Rect& bounds) {
#if defined(USE_X11)
// On Linux the minimum and maximum size should be updated with window size
// when window is not resizable.
if (!resizable_) {
SetMaximumSize(size);
SetMinimumSize(size);
SetMaximumSize(bounds.size());
SetMinimumSize(bounds.size());
}
#endif
window_->SetSize(size);
window_->SetBounds(bounds);
}
gfx::Size NativeWindowViews::GetSize() {
gfx::Rect NativeWindowViews::GetBounds() {
#if defined(OS_WIN)
if (IsMinimized())
return window_->GetRestoredBounds().size();
return window_->GetRestoredBounds();
#endif
return window_->GetWindowBoundsInScreen().size();
return window_->GetWindowBoundsInScreen();
}
void NativeWindowViews::SetContentSize(const gfx::Size& size) {
if (!has_frame_) {
SetSize(size);
NativeWindow::SetSize(size);
return;
}
gfx::Rect bounds = window_->GetWindowBoundsInScreen();
SetSize(ContentBoundsToWindowBounds(gfx::Rect(bounds.origin(), size)).size());
bounds.set_size(size);
SetBounds(ContentBoundsToWindowBounds(bounds));
}
gfx::Size NativeWindowViews::GetContentSize() {
@@ -492,19 +490,6 @@ void NativeWindowViews::Center() {
window_->CenterWindow(GetSize());
}
void NativeWindowViews::SetPosition(const gfx::Point& position) {
window_->SetBounds(gfx::Rect(position, GetSize()));
}
gfx::Point NativeWindowViews::GetPosition() {
#if defined(OS_WIN)
if (IsMinimized())
return window_->GetRestoredBounds().origin();
#endif
return window_->GetWindowBoundsInScreen().origin();
}
void NativeWindowViews::SetTitle(const std::string& title) {
title_ = title;
window_->UpdateWindowTitle();
@@ -674,6 +659,23 @@ bool NativeWindowViews::IsMenuBarVisible() {
return menu_bar_visible_;
}
void NativeWindowViews::SetVisibleOnAllWorkspaces(bool visible) {
window_->SetVisibleOnAllWorkspaces(visible);
}
bool NativeWindowViews::IsVisibleOnAllWorkspaces() {
#if defined(USE_X11)
// Use the presence/absence of _NET_WM_STATE_STICKY in _NET_WM_STATE to
// determine whether the current window is visible on all workspaces.
XAtom sticky_atom = GetAtom("_NET_WM_STATE_STICKY");
std::vector<XAtom> wm_states;
ui::GetAtomArrayProperty(GetAcceleratedWidget(), "_NET_WM_STATE", &wm_states);
return std::find(wm_states.begin(),
wm_states.end(), sticky_atom) != wm_states.end();
#endif
return false;
}
gfx::AcceleratedWidget NativeWindowViews::GetAcceleratedWidget() {
return GetNativeWindow()->GetHost()->GetAcceleratedWidget();
}
@@ -719,6 +721,17 @@ void NativeWindowViews::OnWidgetActivationChanged(
SetMenuBarVisibility(false);
}
void NativeWindowViews::OnWidgetBoundsChanged(
views::Widget* widget, const gfx::Rect& bounds) {
if (widget != window_.get())
return;
if (widget_size_ != bounds.size()) {
NotifyWindowResize();
widget_size_ = bounds.size();
}
}
void NativeWindowViews::DeleteDelegate() {
NotifyWindowClosed();
}
@@ -806,6 +819,10 @@ views::NonClientFrameView* NativeWindowViews::CreateNonClientFrameView(
#endif
}
void NativeWindowViews::OnWidgetMove() {
NotifyWindowMove();
}
#if defined(OS_WIN)
bool NativeWindowViews::ExecuteWindowsCommand(int command_id) {
// Windows uses the 4 lower order bits of |command_id| for type-specific
@@ -839,7 +856,8 @@ void NativeWindowViews::GetDevToolsWindowWMClass(
}
#endif
void NativeWindowViews::HandleMouseDown() {
void NativeWindowViews::ActivateContents(content::WebContents* contents) {
NativeWindow::ActivateContents(contents);
// Hide menu bar when web view is clicked.
if (menu_bar_autohide_ && menu_bar_visible_)
SetMenuBarVisibility(false);
@@ -927,6 +945,15 @@ gfx::Rect NativeWindowViews::ContentBoundsToWindowBounds(
return window_bounds;
}
ui::WindowShowState NativeWindowViews::GetRestoredState() {
if (IsMaximized())
return ui::SHOW_STATE_MAXIMIZED;
if (IsFullscreen())
return ui::SHOW_STATE_FULLSCREEN;
return ui::SHOW_STATE_NORMAL;
}
// static
NativeWindow* NativeWindow::Create(content::WebContents* web_contents,
const mate::Dictionary& options) {

View File

@@ -35,7 +35,6 @@ class NativeWindowViews : public NativeWindow,
// NativeWindow:
void Close() override;
void CloseImmediately() override;
void Move(const gfx::Rect& pos) override;
void Focus(bool focus) override;
bool IsFocused() override;
void Show() override;
@@ -49,9 +48,9 @@ class NativeWindowViews : public NativeWindow,
void Restore() override;
bool IsMinimized() override;
void SetFullScreen(bool fullscreen) override;
bool IsFullscreen() override;
void SetSize(const gfx::Size& size) override;
gfx::Size GetSize() override;
bool IsFullscreen() const override;
void SetBounds(const gfx::Rect& bounds) override;
gfx::Rect GetBounds() override;
void SetContentSize(const gfx::Size& size) override;
gfx::Size GetContentSize() override;
void SetMinimumSize(const gfx::Size& size) override;
@@ -63,8 +62,6 @@ class NativeWindowViews : public NativeWindow,
void SetAlwaysOnTop(bool top) override;
bool IsAlwaysOnTop() override;
void Center() override;
void SetPosition(const gfx::Point& position) override;
gfx::Point GetPosition() override;
void SetTitle(const std::string& title) override;
std::string GetTitle() override;
void FlashFrame(bool flash) override;
@@ -80,6 +77,8 @@ class NativeWindowViews : public NativeWindow,
bool IsMenuBarAutoHide() override;
void SetMenuBarVisibility(bool visible) override;
bool IsMenuBarVisible() override;
void SetVisibleOnAllWorkspaces(bool visible) override;
bool IsVisibleOnAllWorkspaces() override;
gfx::AcceleratedWidget GetAcceleratedWidget();
@@ -94,6 +93,8 @@ class NativeWindowViews : public NativeWindow,
// views::WidgetObserver:
void OnWidgetActivationChanged(
views::Widget* widget, bool active) override;
void OnWidgetBoundsChanged(
views::Widget* widget, const gfx::Rect& bounds) override;
// views::WidgetDelegate:
void DeleteDelegate() override;
@@ -114,6 +115,7 @@ class NativeWindowViews : public NativeWindow,
views::ClientView* CreateClientView(views::Widget* widget) override;
views::NonClientFrameView* CreateNonClientFrameView(
views::Widget* widget) override;
void OnWidgetMove() override;
#if defined(OS_WIN)
bool ExecuteWindowsCommand(int command_id) override;
#endif
@@ -126,7 +128,7 @@ class NativeWindowViews : public NativeWindow,
#endif
// content::WebContentsDelegate:
void HandleMouseDown() override;
void ActivateContents(content::WebContents* contents) override;
void HandleKeyboardEvent(
content::WebContents*,
const content::NativeWebKeyboardEvent& event) override;
@@ -141,6 +143,9 @@ class NativeWindowViews : public NativeWindow,
// in client area we need to substract/add menu bar's height in convertions.
gfx::Rect ContentBoundsToWindowBounds(const gfx::Rect& content_bounds);
// Returns the restore state for the window.
ui::WindowShowState GetRestoredState();
scoped_ptr<views::Widget> window_;
views::View* web_view_; // Managed by inspectable_web_contents_.
@@ -171,6 +176,7 @@ class NativeWindowViews : public NativeWindow,
std::string title_;
gfx::Size minimum_size_;
gfx::Size maximum_size_;
gfx::Size widget_size_;
scoped_ptr<SkRegion> draggable_region_;

View File

@@ -5,6 +5,7 @@
#include "atom/browser/net/adapter_request_job.h"
#include "base/threading/sequenced_worker_pool.h"
#include "atom/browser/net/url_request_buffer_job.h"
#include "atom/browser/net/url_request_string_job.h"
#include "atom/browser/net/asar/url_request_asar_job.h"
#include "atom/common/asar/asar_util.h"
@@ -70,8 +71,6 @@ base::WeakPtr<AdapterRequestJob> AdapterRequestJob::GetWeakPtr() {
}
void AdapterRequestJob::CreateErrorJobAndStart(int error_code) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
real_job_ = new net::URLRequestErrorJob(
request(), network_delegate(), error_code);
real_job_->Start();
@@ -80,47 +79,32 @@ void AdapterRequestJob::CreateErrorJobAndStart(int error_code) {
void AdapterRequestJob::CreateStringJobAndStart(const std::string& mime_type,
const std::string& charset,
const std::string& data) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
real_job_ = new URLRequestStringJob(
request(), network_delegate(), mime_type, charset, data);
real_job_->Start();
}
void AdapterRequestJob::CreateBufferJobAndStart(
const std::string& mime_type,
const std::string& charset,
scoped_refptr<base::RefCountedBytes> data) {
real_job_ = new URLRequestBufferJob(
request(), network_delegate(), mime_type, charset, data);
real_job_->Start();
}
void AdapterRequestJob::CreateFileJobAndStart(const base::FilePath& path) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
base::FilePath asar_path, relative_path;
if (!asar::GetAsarArchivePath(path, &asar_path, &relative_path)) {
real_job_ = new net::URLRequestFileJob(
request(),
network_delegate(),
path,
content::BrowserThread::GetBlockingPool()->
GetTaskRunnerWithShutdownBehavior(
base::SequencedWorkerPool::SKIP_ON_SHUTDOWN));
} else {
auto archive = asar::GetOrCreateAsarArchive(asar_path);
if (archive)
real_job_ = new asar::URLRequestAsarJob(
request(),
network_delegate(),
archive,
relative_path,
content::BrowserThread::GetBlockingPool()->
GetTaskRunnerWithShutdownBehavior(
base::SequencedWorkerPool::SKIP_ON_SHUTDOWN));
else
real_job_ = new net::URLRequestErrorJob(
request(), network_delegate(), net::ERR_FILE_NOT_FOUND);
}
real_job_ = asar::CreateJobFromPath(
path,
request(),
network_delegate(),
content::BrowserThread::GetBlockingPool()->
GetTaskRunnerWithShutdownBehavior(
base::SequencedWorkerPool::SKIP_ON_SHUTDOWN));
real_job_->Start();
}
void AdapterRequestJob::CreateJobFromProtocolHandlerAndStart() {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
DCHECK(protocol_handler_);
real_job_ = protocol_handler_->MaybeCreateJob(request(),
network_delegate());
if (!real_job_.get())

View File

@@ -7,9 +7,11 @@
#include <string>
#include "base/memory/ref_counted_memory.h"
#include "base/memory/weak_ptr.h"
#include "net/url_request/url_request_job.h"
#include "net/url_request/url_request_job_factory.h"
#include "v8/include/v8.h"
namespace base {
class FilePath;
@@ -50,6 +52,9 @@ class AdapterRequestJob : public net::URLRequestJob {
void CreateStringJobAndStart(const std::string& mime_type,
const std::string& charset,
const std::string& data);
void CreateBufferJobAndStart(const std::string& mime_type,
const std::string& charset,
scoped_refptr<base::RefCountedBytes> data);
void CreateFileJobAndStart(const base::FilePath& path);
void CreateJobFromProtocolHandlerAndStart();

View File

@@ -14,6 +14,36 @@
namespace asar {
// static
net::URLRequestJob* CreateJobFromPath(
const base::FilePath& full_path,
net::URLRequest* request,
net::NetworkDelegate* network_delegate,
const scoped_refptr<base::TaskRunner> file_task_runner) {
// Create asar:// job when the path contains "xxx.asar/", otherwise treat the
// URL request as file://.
base::FilePath asar_path, relative_path;
if (!GetAsarArchivePath(full_path, &asar_path, &relative_path))
return new net::URLRequestFileJob(request, network_delegate, full_path,
file_task_runner);
std::shared_ptr<Archive> archive = GetOrCreateAsarArchive(asar_path);
Archive::FileInfo file_info;
if (!archive || !archive->GetFileInfo(relative_path, &file_info))
return new net::URLRequestErrorJob(request, network_delegate,
net::ERR_FILE_NOT_FOUND);
if (file_info.unpacked) {
base::FilePath real_path;
archive->CopyFileOut(relative_path, &real_path);
return new net::URLRequestFileJob(request, network_delegate, real_path,
file_task_runner);
}
return new URLRequestAsarJob(request, network_delegate, archive,
relative_path, file_info, file_task_runner);
}
AsarProtocolHandler::AsarProtocolHandler(
const scoped_refptr<base::TaskRunner>& file_task_runner)
: file_task_runner_(file_task_runner) {}
@@ -26,21 +56,8 @@ net::URLRequestJob* AsarProtocolHandler::MaybeCreateJob(
net::NetworkDelegate* network_delegate) const {
base::FilePath full_path;
net::FileURLToFilePath(request->url(), &full_path);
// Create asar:// job when the path contains "xxx.asar/", otherwise treat the
// URL request as file://.
base::FilePath asar_path, relative_path;
if (!GetAsarArchivePath(full_path, &asar_path, &relative_path))
return new net::URLRequestFileJob(request, network_delegate, full_path,
file_task_runner_);
std::shared_ptr<Archive> archive = GetOrCreateAsarArchive(asar_path);
if (!archive)
return new net::URLRequestErrorJob(request, network_delegate,
net::ERR_FILE_NOT_FOUND);
return new URLRequestAsarJob(request, network_delegate, archive,
relative_path, file_task_runner_);
return CreateJobFromPath(full_path, request, network_delegate,
file_task_runner_);
}
bool AsarProtocolHandler::IsSafeRedirectTarget(const GURL& location) const {

View File

@@ -19,10 +19,12 @@ URLRequestAsarJob::URLRequestAsarJob(
net::NetworkDelegate* network_delegate,
std::shared_ptr<Archive> archive,
const base::FilePath& file_path,
const Archive::FileInfo& file_info,
const scoped_refptr<base::TaskRunner>& file_task_runner)
: net::URLRequestJob(request, network_delegate),
archive_(archive),
file_path_(file_path),
file_info_(file_info),
stream_(new net::FileStream(file_task_runner)),
remaining_bytes_(0),
file_task_runner_(file_task_runner),
@@ -31,12 +33,6 @@ URLRequestAsarJob::URLRequestAsarJob(
URLRequestAsarJob::~URLRequestAsarJob() {}
void URLRequestAsarJob::Start() {
if (!archive_ || !archive_->GetFileInfo(file_path_, &file_info_)) {
NotifyDone(net::URLRequestStatus(net::URLRequestStatus::FAILED,
net::ERR_FILE_NOT_FOUND));
return;
}
remaining_bytes_ = static_cast<int64>(file_info_.size);
int flags = base::File::FLAG_OPEN |

View File

@@ -24,12 +24,20 @@ class FileStream;
namespace asar {
// Createa a request job according to the file path.
net::URLRequestJob* CreateJobFromPath(
const base::FilePath& full_path,
net::URLRequest* request,
net::NetworkDelegate* network_delegate,
const scoped_refptr<base::TaskRunner> file_task_runner);
class URLRequestAsarJob : public net::URLRequestJob {
public:
URLRequestAsarJob(net::URLRequest* request,
net::NetworkDelegate* network_delegate,
std::shared_ptr<Archive> archive,
const base::FilePath& file_path,
const Archive::FileInfo& file_info,
const scoped_refptr<base::TaskRunner>& file_task_runner);
// net::URLRequestJob:
@@ -55,8 +63,8 @@ class URLRequestAsarJob : public net::URLRequestJob {
void DidRead(scoped_refptr<net::IOBuffer> buf, int result);
std::shared_ptr<Archive> archive_;
Archive::FileInfo file_info_;
base::FilePath file_path_;
Archive::FileInfo file_info_;
scoped_ptr<net::FileStream> stream_;
int64 remaining_bytes_;

View File

@@ -0,0 +1,26 @@
// Copyright (c) 2015 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "atom/browser/net/http_protocol_handler.h"
#include "net/url_request/url_request_http_job.h"
namespace atom {
HttpProtocolHandler::HttpProtocolHandler(const std::string& scheme)
: scheme_(scheme) {
}
HttpProtocolHandler::~HttpProtocolHandler() {
}
net::URLRequestJob* HttpProtocolHandler::MaybeCreateJob(
net::URLRequest* request,
net::NetworkDelegate* network_delegate) const {
return net::URLRequestHttpJob::Factory(request,
network_delegate,
scheme_);
}
} // namespace atom

View File

@@ -0,0 +1,30 @@
// Copyright (c) 2015 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef ATOM_BROWSER_NET_HTTP_PROTOCOL_HANDLER_H_
#define ATOM_BROWSER_NET_HTTP_PROTOCOL_HANDLER_H_
#include <string>
#include "net/url_request/url_request_job_factory.h"
namespace atom {
class HttpProtocolHandler : public net::URLRequestJobFactory::ProtocolHandler {
public:
explicit HttpProtocolHandler(const std::string&);
virtual ~HttpProtocolHandler();
// net::URLRequestJobFactory::ProtocolHandler:
net::URLRequestJob* MaybeCreateJob(
net::URLRequest* request,
net::NetworkDelegate* network_delegate) const override;
private:
std::string scheme_;
};
} // namespace atom
#endif // ATOM_BROWSER_NET_HTTP_PROTOCOL_HANDLER_H_

View File

@@ -0,0 +1,36 @@
// 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/net/url_request_buffer_job.h"
#include <string>
#include "net/base/net_errors.h"
namespace atom {
URLRequestBufferJob::URLRequestBufferJob(
net::URLRequest* request,
net::NetworkDelegate* network_delegate,
const std::string& mime_type,
const std::string& charset,
scoped_refptr<base::RefCountedBytes> data)
: net::URLRequestSimpleJob(request, network_delegate),
mime_type_(mime_type),
charset_(charset),
buffer_data_(data) {
}
int URLRequestBufferJob::GetRefCountedData(
std::string* mime_type,
std::string* charset,
scoped_refptr<base::RefCountedMemory>* data,
const net::CompletionCallback& callback) const {
*mime_type = mime_type_;
*charset = charset_;
*data = buffer_data_;
return net::OK;
}
} // namespace atom

View File

@@ -0,0 +1,40 @@
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef ATOM_BROWSER_NET_URL_REQUEST_BUFFER_JOB_H_
#define ATOM_BROWSER_NET_URL_REQUEST_BUFFER_JOB_H_
#include <string>
#include "base/memory/ref_counted_memory.h"
#include "net/url_request/url_request_simple_job.h"
#include "atom/common/node_includes.h"
namespace atom {
class URLRequestBufferJob : public net::URLRequestSimpleJob {
public:
URLRequestBufferJob(net::URLRequest* request,
net::NetworkDelegate* network_delegate,
const std::string& mime_type,
const std::string& charset,
scoped_refptr<base::RefCountedBytes> data);
// URLRequestSimpleJob:
int GetRefCountedData(std::string* mime_type,
std::string* charset,
scoped_refptr<base::RefCountedMemory>* data,
const net::CompletionCallback& callback) const override;
private:
std::string mime_type_;
std::string charset_;
scoped_refptr<base::RefCountedBytes> buffer_data_;
DISALLOW_COPY_AND_ASSIGN(URLRequestBufferJob);
};
} // namespace atom
#endif // ATOM_BROWSER_NET_URL_REQUEST_BUFFER_JOB_H_

View File

@@ -1,202 +0,0 @@
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "atom/browser/node_debugger.h"
#include <string>
#include "base/bind.h"
#include "base/command_line.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "content/public/browser/browser_thread.h"
#include "net/socket/tcp_listen_socket.h"
#include "atom/common/node_includes.h"
namespace atom {
namespace {
// NodeDebugger is stored in Isolate's data, slots 0, 1, 3 have already been
// taken by gin, blink and node, using 2 is a safe option for now.
const int kIsolateSlot = 2;
const char* kContentLength = "Content-Length";
} // namespace
NodeDebugger::NodeDebugger(v8::Isolate* isolate)
: isolate_(isolate),
thread_("NodeDebugger"),
content_length_(-1),
weak_factory_(this) {
bool use_debug_agent = false;
int port = 5858;
bool wait_for_connection = false;
std::string port_str;
base::CommandLine* cmd = base::CommandLine::ForCurrentProcess();
if (cmd->HasSwitch("debug")) {
use_debug_agent = true;
port_str = cmd->GetSwitchValueASCII("debug");
}
if (cmd->HasSwitch("debug-brk")) {
use_debug_agent = true;
wait_for_connection = true;
port_str = cmd->GetSwitchValueASCII("debug-brk");
}
if (use_debug_agent) {
if (!port_str.empty())
base::StringToInt(port_str, &port);
isolate_->SetData(kIsolateSlot, this);
v8::Debug::SetMessageHandler(DebugMessageHandler);
if (wait_for_connection)
v8::Debug::DebugBreak(isolate_);
// Start a new IO thread.
base::Thread::Options options;
options.message_loop_type = base::MessageLoop::TYPE_IO;
if (!thread_.StartWithOptions(options)) {
LOG(ERROR) << "Unable to start debugger thread";
return;
}
// Start the server in new IO thread.
thread_.message_loop()->PostTask(
FROM_HERE,
base::Bind(&NodeDebugger::StartServer, weak_factory_.GetWeakPtr(),
port));
}
}
NodeDebugger::~NodeDebugger() {
thread_.Stop();
}
bool NodeDebugger::IsRunning() const {
return thread_.IsRunning();
}
void NodeDebugger::StartServer(int port) {
server_ = net::TCPListenSocket::CreateAndListen("127.0.0.1", port, this);
if (!server_) {
LOG(ERROR) << "Cannot start debugger server";
return;
}
}
void NodeDebugger::CloseSession() {
accepted_socket_.reset();
}
void NodeDebugger::OnMessage(const std::string& message) {
if (message.find("\"type\":\"request\",\"command\":\"disconnect\"}") !=
std::string::npos)
CloseSession();
base::string16 message16 = base::UTF8ToUTF16(message);
v8::Debug::SendCommand(
isolate_,
reinterpret_cast<const uint16_t*>(message16.data()), message16.size());
content::BrowserThread::PostTask(
content::BrowserThread::UI, FROM_HERE,
base::Bind(&v8::Debug::ProcessDebugMessages));
}
void NodeDebugger::SendMessage(const std::string& message) {
if (accepted_socket_) {
std::string header = base::StringPrintf(
"%s: %d\r\n\r\n", kContentLength, static_cast<int>(message.size()));
accepted_socket_->Send(header);
accepted_socket_->Send(message);
}
}
void NodeDebugger::SendConnectMessage() {
accepted_socket_->Send(base::StringPrintf(
"Type: connect\r\n"
"V8-Version: %s\r\n"
"Protocol-Version: 1\r\n"
"Embedding-Host: %s\r\n"
"%s: 0\r\n",
v8::V8::GetVersion(), "Atom-Shell", kContentLength), true);
}
// static
void NodeDebugger::DebugMessageHandler(const v8::Debug::Message& message) {
NodeDebugger* self = static_cast<NodeDebugger*>(
message.GetIsolate()->GetData(kIsolateSlot));
if (self) {
std::string message8(*v8::String::Utf8Value(message.GetJSON()));
self->thread_.message_loop()->PostTask(
FROM_HERE,
base::Bind(&NodeDebugger::SendMessage, self->weak_factory_.GetWeakPtr(),
message8));
}
}
void NodeDebugger::DidAccept(net::StreamListenSocket* server,
scoped_ptr<net::StreamListenSocket> socket) {
// Only accept one session.
if (accepted_socket_) {
socket->Send(std::string("Remote debugging session already active"), true);
return;
}
accepted_socket_ = socket.Pass();
SendConnectMessage();
}
void NodeDebugger::DidRead(net::StreamListenSocket* socket,
const char* data,
int len) {
buffer_.append(data, len);
do {
if (buffer_.size() == 0)
return;
// Read the "Content-Length" header.
if (content_length_ < 0) {
size_t pos = buffer_.find("\r\n\r\n");
if (pos == std::string::npos)
return;
// We can be sure that the header is "Content-Length: xxx\r\n".
std::string content_length = buffer_.substr(16, pos - 16);
if (!base::StringToInt(content_length, &content_length_)) {
DidClose(accepted_socket_.get());
return;
}
// Strip header from buffer.
buffer_ = buffer_.substr(pos + 4);
}
// Read the message.
if (buffer_.size() >= static_cast<size_t>(content_length_)) {
std::string message = buffer_.substr(0, content_length_);
buffer_ = buffer_.substr(content_length_);
OnMessage(message);
// Get ready for next message.
content_length_ = -1;
}
} while (true);
}
void NodeDebugger::DidClose(net::StreamListenSocket* socket) {
// If we lost the connection, then simulate a disconnect msg:
OnMessage("{\"seq\":1,\"type\":\"request\",\"command\":\"disconnect\"}");
}
} // namespace atom

View File

@@ -1,59 +0,0 @@
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef ATOM_BROWSER_NODE_DEBUGGER_H_
#define ATOM_BROWSER_NODE_DEBUGGER_H_
#include <string>
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/threading/thread.h"
#include "net/socket/stream_listen_socket.h"
#include "v8/include/v8-debug.h"
namespace atom {
// Add support for node's "--debug" switch.
class NodeDebugger : public net::StreamListenSocket::Delegate {
public:
explicit NodeDebugger(v8::Isolate* isolate);
virtual ~NodeDebugger();
bool IsRunning() const;
private:
void StartServer(int port);
void CloseSession();
void OnMessage(const std::string& message);
void SendMessage(const std::string& message);
void SendConnectMessage();
static void DebugMessageHandler(const v8::Debug::Message& message);
// net::StreamListenSocket::Delegate:
void DidAccept(net::StreamListenSocket* server,
scoped_ptr<net::StreamListenSocket> socket) override;
void DidRead(net::StreamListenSocket* socket,
const char* data,
int len) override;
void DidClose(net::StreamListenSocket* socket) override;
v8::Isolate* isolate_;
base::Thread thread_;
scoped_ptr<net::StreamListenSocket> server_;
scoped_ptr<net::StreamListenSocket> accepted_socket_;
std::string buffer_;
int content_length_;
base::WeakPtrFactory<NodeDebugger> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(NodeDebugger);
};
} // namespace atom
#endif // ATOM_BROWSER_NODE_DEBUGGER_H_

View File

@@ -7,7 +7,7 @@
<key>CFBundleExecutable</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundleIdentifier</key>
<string>com.github.atom-shell</string>
<string>${ATOM_BUNDLE_ID}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
@@ -17,7 +17,7 @@
<key>CFBundleIconFile</key>
<string>atom.icns</string>
<key>CFBundleVersion</key>
<string>0.22.1</string>
<string>0.27.1</string>
<key>LSMinimumSystemVersion</key>
<string>10.8.0</string>
<key>NSMainNibFile</key>

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 345 KiB

After

Width:  |  Height:  |  Size: 76 KiB

View File

@@ -50,8 +50,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 0,22,1,0
PRODUCTVERSION 0,22,1,0
FILEVERSION 0,27,1,0
PRODUCTVERSION 0,27,1,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -67,13 +67,13 @@ BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "GitHub, Inc."
VALUE "FileDescription", "Atom-Shell"
VALUE "FileVersion", "0.22.1"
VALUE "InternalName", "atom.exe"
VALUE "LegalCopyright", "Copyright (C) 2013 GitHub, Inc. All rights reserved."
VALUE "OriginalFilename", "atom.exe"
VALUE "ProductName", "Atom-Shell"
VALUE "ProductVersion", "0.22.1"
VALUE "FileDescription", "Electron"
VALUE "FileVersion", "0.27.1"
VALUE "InternalName", "electron.exe"
VALUE "LegalCopyright", "Copyright (C) 2015 GitHub, Inc. All rights reserved."
VALUE "OriginalFilename", "electron.exe"
VALUE "ProductName", "Electron"
VALUE "ProductVersion", "0.27.1"
VALUE "SquirrelAwareVersion", "1"
END
END

View File

@@ -109,8 +109,12 @@ bool StringToAccelerator(const std::string& description,
modifiers |= ui::EF_SHIFT_DOWN;
} else if (tokens[i] == "ctrl" || tokens[i] == "control") {
modifiers |= ui::EF_CONTROL_DOWN;
} else if (tokens[i] == "super") {
modifiers |= ui::EF_COMMAND_DOWN;
#if defined(OS_MACOSX)
} else if (tokens[i] == "cmd" || tokens[i] == "command") {
modifiers |= ui::EF_COMMAND_DOWN;
#endif
} else if (tokens[i] == "commandorcontrol" || tokens[i] == "cmdorctrl") {
#if defined(OS_MACOSX)
modifiers |= ui::EF_COMMAND_DOWN;
@@ -171,7 +175,7 @@ bool StringToAccelerator(const std::string& description,
} else if (tokens[i].size() > 1 && tokens[i][0] == 'f') {
// F1 - F24.
int n;
if (base::StringToInt(tokens[i].c_str() + 1, &n)) {
if (base::StringToInt(tokens[i].c_str() + 1, &n) && n > 0 && n < 25) {
key = static_cast<ui::KeyboardCode>(ui::VKEY_F1 + n - 1);
} else {
LOG(WARNING) << tokens[i] << "is not available on keyboard";

View File

@@ -120,7 +120,7 @@ struct RunState {
};
bool CreateDialogThread(RunState* run_state) {
base::Thread* thread = new base::Thread("AtomShell_FileDialogThread");
base::Thread* thread = new base::Thread(ATOM_PRODUCT_NAME "FileDialogThread");
thread->init_com_with_mta(false);
if (!thread->Start())
return false;

View File

@@ -26,8 +26,8 @@ void TrayIcon::DisplayBalloon(const gfx::Image& icon,
const base::string16& contents) {
}
void TrayIcon::NotifyClicked() {
FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnClicked());
void TrayIcon::NotifyClicked(const gfx::Rect& bounds) {
FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnClicked(bounds));
}
void TrayIcon::NotifyDoubleClicked() {

View File

@@ -10,6 +10,7 @@
#include "atom/browser/ui/tray_icon_observer.h"
#include "base/observer_list.h"
#include "ui/base/models/simple_menu_model.h"
#include "ui/gfx/geometry/rect.h"
namespace atom {
@@ -50,7 +51,7 @@ class TrayIcon {
void AddObserver(TrayIconObserver* obs) { observers_.AddObserver(obs); }
void RemoveObserver(TrayIconObserver* obs) { observers_.RemoveObserver(obs); }
void NotifyClicked();
void NotifyClicked(const gfx::Rect& = gfx::Rect());
void NotifyDoubleClicked();
void NotifyBalloonShow();
void NotifyBalloonClicked();

View File

@@ -7,6 +7,7 @@
#include "atom/browser/ui/cocoa/atom_menu_controller.h"
#include "base/strings/sys_string_conversions.h"
#include "ui/gfx/image/image.h"
#include "ui/gfx/screen.h"
@interface StatusItemController : NSObject {
atom::TrayIconCocoa* trayIcon_; // weak
@@ -25,7 +26,14 @@
}
- (void)handleClick:(id)sender {
trayIcon_->NotifyClicked();
// Get the frame of the NSStatusItem.
NSRect frame = [NSApp currentEvent].window.frame;
gfx::Rect bounds(frame.origin.x, 0, NSWidth(frame), NSHeight(frame));
// Flip coordinates to gfx (0,0 in top-left corner) using current screen.
NSScreen* screen = [[NSScreen screens] objectAtIndex:0];
bounds.set_y(NSHeight([screen frame]) - NSMaxY(frame));
trayIcon_->NotifyClicked(bounds);
}
- (void)handleDoubleClick:(id)sender {

View File

@@ -42,6 +42,7 @@ void TrayIconGtk::SetContextMenu(ui::SimpleMenuModel* menu_model) {
}
void TrayIconGtk::OnClick() {
NotifyClicked();
}
bool TrayIconGtk::HasClickAction() {

View File

@@ -5,11 +5,15 @@
#ifndef ATOM_BROWSER_UI_TRAY_ICON_OBSERVER_H_
#define ATOM_BROWSER_UI_TRAY_ICON_OBSERVER_H_
namespace gfx {
class Rect;
}
namespace atom {
class TrayIconObserver {
public:
virtual void OnClicked() {}
virtual void OnClicked(const gfx::Rect&) {}
virtual void OnDoubleClicked() {}
virtual void OnBalloonShow() {}
virtual void OnBalloonClicked() {}

View File

@@ -25,7 +25,7 @@ namespace atom {
namespace {
const char kViewClassName[] = "AtomMenuBar";
const char kViewClassName[] = "ElectronMenuBar";
// Default color of the menu bar.
const SkColor kDefaultColor = SkColorSetARGB(255, 233, 233, 233);

View File

@@ -24,7 +24,7 @@ const UINT kNotifyIconMessage = WM_APP + 1;
// |kBaseIconId| is 2 to avoid conflicts with plugins that hard-code id 1.
const UINT kBaseIconId = 2;
const wchar_t kNotifyIconHostWindowClass[] = L"AtomShell_NotifyIconHostWindow";
const wchar_t kNotifyIconHostWindowClass[] = L"Electron_NotifyIconHostWindow";
} // namespace

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