Compare commits

..

371 Commits

Author SHA1 Message Date
Cheng Zhao
85b0885af7 Bump v0.20.0 2014-12-12 18:21:14 -08:00
Cheng Zhao
11cd301127 Only listen to its own events in <webview>, fixes #885 2014-12-12 17:16:12 -08:00
Cheng Zhao
654d21100f Upgrade libchromiumcontent to remove dom storage quota
Closes #897.
2014-12-12 16:42:07 -08:00
Cheng Zhao
5bd924a52d mac: Use com.github.atom-shell as default CFBundleIdentifier 2014-12-12 15:37:13 -08:00
Cheng Zhao
186d34c33a Merge pull request #904 from atom/chrome39
Upgrade to Chrome 39
2014-12-12 15:23:55 -08:00
Cheng Zhao
b0a414ea83 Upgrade brightray 2014-12-12 14:50:39 -08:00
Cheng Zhao
099eb53d3c Upgrade libchromiumcontent to fix generating node.lib 2014-12-12 10:40:42 -08:00
Cheng Zhao
e3ccb18696 win: Fix calculating window bounds on high DPI display 2014-12-12 09:04:43 -08:00
Cheng Zhao
e38614ce31 win: No longer support building with VS Express
The Community edition can provide everything we need for Professional
edition.
2014-12-11 19:47:15 -08:00
Cheng Zhao
290dd4ccd8 win: Use d3dcompiler_46.dll 2014-12-11 19:46:42 -08:00
Cheng Zhao
1bebf1cc2c win: Fix generating location.pak. 2014-12-11 19:29:36 -08:00
Cheng Zhao
d8d9dea792 Upgrade node to fix failed call to LoadLibrary 2014-12-11 18:33:39 -08:00
Cheng Zhao
7457f81283 mac: Fix installing view on frameless window
Closes #601.
2014-12-11 14:25:51 -08:00
Cheng Zhao
158d8efb8e Merge pull request #910 from sonnyp/patch-1
Update tray.md
2014-12-11 13:08:23 -08:00
Cheng Zhao
0b668b8e17 Minor fixes on <webview> 2014-12-11 09:30:55 -08:00
Sonny Piers
5437470b4e Update tray.md
checked seems to be the correct property
2014-12-11 12:28:01 +01:00
Cheng Zhao
409f2b4d0f win: Fix compilation errors 2014-12-10 14:17:07 -08:00
Cheng Zhao
64edede20d Move handling of "preload" to web-view-attributes 2014-12-10 11:05:51 -08:00
Cheng Zhao
6624fd9a1b Fix relative links in "src" of <webview> 2014-12-10 10:51:34 -08:00
Cheng Zhao
1cdbb6f186 Upgrade brightray to fix running on Mac 2014-12-09 22:40:26 -08:00
Cheng Zhao
f57533fa0e Add os_bsd variable for breakpad 2014-12-09 17:25:45 -08:00
Cheng Zhao
2db7c84cbc spec: Remove "restore" event test
It is too slow and unstable.
2014-12-09 17:16:21 -08:00
Cheng Zhao
cefc846e9e linux: Upgrade breakpad to fix building 2014-12-09 17:05:18 -08:00
Cheng Zhao
1853bef39a views: SizeConstraintsChanged has become required 2014-12-09 16:55:01 -08:00
Cheng Zhao
22c4911b58 linux: GTK+ status icon has come back 2014-12-09 16:55:01 -08:00
Cheng Zhao
e58b3ddc86 Bump Chrome version 2014-12-09 16:37:40 -08:00
Cheng Zhao
e3ba17f2d3 linux: Disable warnings for g_settings_list_schemas 2014-12-09 16:37:05 -08:00
Cheng Zhao
7d1830d014 Upgrade node to bump node module version 2014-12-09 15:49:17 -08:00
Cheng Zhao
da3a988c8c Merge branch 'master' into chrome39
Conflicts:
	vendor/brightray
2014-12-09 15:49:06 -08:00
Cheng Zhao
9d23cce2b6 Move "nodeintegration" and "plugins" to web-view-attributes 2014-12-09 14:51:35 -08:00
Cheng Zhao
68381e1b76 Use element instant id for GetGuestByInstanceID 2014-12-09 14:38:43 -08:00
Cheng Zhao
3493d2c701 Merge pull request #901 from IgorKlopov/patch-1
Full verbosity, helps troubleshooting
2014-12-08 21:45:55 -08:00
Cheng Zhao
9e1d3f9e27 Merge pull request #902 from IgorKlopov/patch-2
Why not verbose?
2014-12-08 21:44:00 -08:00
Cheng Zhao
7fdd94520e Merge pull request #898 from paulcbetts/dont-hardcode-atom-helper
Dont hardcode paths to Atom [Helper / Framework]
2014-12-08 21:39:14 -08:00
Cheng Zhao
9fcb6b2cd1 Moved parseSrcAttribute() into the SrcAttribute object as parse()
Imported from:
3bc15760f9%5E%21/
2014-12-08 21:35:10 -08:00
Cheng Zhao
cbafac774e Various webview cleanup
Imported from:
848f1ed048%5E%21/
2014-12-08 21:15:18 -08:00
Cheng Zhao
7f5fb4e6f9 Renamed "WebView" -> "WebViewImpl" in web_view.js and other files that import it
Imported from:
a615ea0839%5E%21/
2014-12-08 21:10:59 -08:00
Cheng Zhao
ac51207860 Optimized the handling of webview attribute mutation
Imported from:
86dff6fc51%5E%21/
2014-12-08 21:06:23 -08:00
Paul Betts
aa3be09ab0 Bump submodule to merged version 2014-12-08 20:26:09 -08:00
Cheng Zhao
4348143fd9 Simplify web-view.coffee
Imported from:
3ef1fc1b72%5E%21/
2014-12-08 17:15:50 -08:00
Cheng Zhao
b6b8b936f2 Automated the definitions of webview attributes as properties on the webview node
Imported from:
aef58f49f6%5E%21/
2014-12-08 17:05:57 -08:00
Cheng Zhao
2c27b953b5 Got rid of the internal copies of webview attributes
Imported from:
abb035a09b%5E%21/
2014-12-08 16:56:14 -08:00
Cheng Zhao
d7eae69587 Webview attributes overhaul
Imported from:
884a5b43cb
2014-12-08 16:14:12 -08:00
Cheng Zhao
e0f1433c12 Moved constants out of web-view.coffee and into a new file
Imported from:
ccbfe27c8d
2014-12-08 13:37:18 -08:00
IgorKlopov
27710cd4f7 bootstrap.py -v in mac 2014-12-08 20:07:29 +03:00
IgorKlopov
4d5bbbc2d7 bootstrap.py -v 2014-12-08 20:07:00 +03:00
IgorKlopov
da900b3094 bootstrap.py also imports it 2014-12-08 20:03:48 +03:00
IgorKlopov
0f29d9f30f verbose_mode from config.py
Also, no return value supposed for execute_stdout
2014-12-08 20:02:08 +03:00
IgorKlopov
b88824a70c verbose_mode getter/setter 2014-12-08 20:00:35 +03:00
Cheng Zhao
882a08f61a Fix browser plugin API changes 2014-12-08 09:00:00 -08:00
Cheng Zhao
a9072049ea Move webview code to atom/renderer/lib/web-view 2014-12-08 06:08:21 -08:00
Paul Betts
e87876671f Add some documentation about renaming Atom Shell 2014-12-07 21:38:29 -08:00
Paul Betts
d0f6c89e77 Bump brightray to pick up brightray/brightray#85 2014-12-07 21:26:19 -08:00
Paul Betts
8eab230fe1 Delete OverrideChildProcessPath and OverrideFrameworkBundlePath altogether 2014-12-07 21:06:47 -08:00
IgorKlopov
7ff95ec255 Travis CI says: execute unused
Removed `execute` import
2014-12-08 03:04:41 +03:00
IgorKlopov
20afd51a9d Travis CI says long line detected
Foldede the line
2014-12-08 02:58:04 +03:00
IgorKlopov
19bba5c18c One more verbose_mode
`bootstrap.py` new variable `verbose_mode` to run `npm install` with --verbose option
2014-12-08 02:52:13 +03:00
IgorKlopov
bf4c219766 Make use of execute_stdout
execute_stdout makes stdout real-time
2014-12-08 02:47:05 +03:00
IgorKlopov
a5e1d8c97f introduce execute_stdout
`execute_stdout` does not return the output of the process. Instead it outputs directly to current stdout (in real-time - to see what is `npm` doing now)
2014-12-08 02:42:55 +03:00
Cheng Zhao
7bc364a374 Upgrade node for new V8 API 2014-12-07 13:09:50 -08:00
Cheng Zhao
5dd73e74cb Disable crash reporter spec on Yosemite 2014-12-07 08:57:55 -08:00
Cheng Zhao
ba347f6460 mac: Fix crash reporting on Yosemite 2014-12-07 08:56:59 -08:00
Cheng Zhao
85cf8f9174 apm@0.112.0 2014-12-07 08:13:42 -08:00
IgorKlopov
2153e018a3 Bootstrap indeed 2014-12-07 18:47:23 +03:00
IgorKlopov
3f4fec0864 Why not verbose?
The silence are scary
2014-12-07 18:46:12 +03:00
Cheng Zhao
10823eeeaa Fix compilation errors caused by Chrome 39 2014-12-07 07:43:26 -08:00
Cheng Zhao
25ea169c72 Upgrade libchromiumcontent to 39.0.2171.65 2014-12-07 07:43:07 -08:00
IgorKlopov
743e8331b5 Helps troubleshooting 2014-12-07 18:42:59 +03:00
Cheng Zhao
d309fd5a27 Update printing code 2014-12-07 06:55:40 -08:00
Paul Betts
091357ad8e Find the MainMenu nib correctly 2014-12-05 23:19:19 -08:00
Paul Betts
3d4491a468 Determine the Helper name from the App name 2014-12-05 23:19:19 -08:00
Cheng Zhao
6d32db32ef Upgrade node, fixes #843 2014-12-04 12:17:36 -08:00
Cheng Zhao
357f5f9781 Upgrade brightray 2014-12-04 11:45:02 -08:00
Cheng Zhao
a0f5544a07 Fix compilation warning on Yosemite 2014-12-03 15:21:50 -08:00
Cheng Zhao
6c9dbe190d Bump v0.19.5 2014-11-28 20:01:42 +08:00
Cheng Zhao
29b8cd8df7 Merge pull request #872 from atom/tray-balloon
Add Tray.displayBalloon API on Windows
2014-11-28 20:01:08 +08:00
Cheng Zhao
f78f94d4f1 Fix building on Mac 2014-11-28 19:50:10 +08:00
Cheng Zhao
ef8b20af65 docs: "balloon-show" and "balloon-closed" events 2014-11-28 19:47:21 +08:00
Cheng Zhao
9f99209733 win: Add "balloon-show" and "balloon-closed" events 2014-11-28 19:42:57 +08:00
Cheng Zhao
ee3fa67c48 docs: Tray balloon 2014-11-28 19:23:13 +08:00
Cheng Zhao
a3327ac53e win: Remove XP code in Tray 2014-11-28 18:59:51 +08:00
Cheng Zhao
210c97f957 win: Add "balloon-clicked" event for Tray 2014-11-28 18:50:31 +08:00
Cheng Zhao
8097cb2b9e Add Tray.displayBallon API 2014-11-28 18:39:30 +08:00
Cheng Zhao
2650e34867 win: Add NotifyIcon::DisplayBalloon 2014-11-28 18:30:43 +08:00
Cheng Zhao
9f0b5a14a4 Remove tray_icon_win.h 2014-11-28 18:21:31 +08:00
Cheng Zhao
a8b4e5faec OVERRIDE => override in notify_icon.h 2014-11-28 18:20:38 +08:00
Cheng Zhao
f6c66a7374 Add Tray.destroy() API, fixes #871 2014-11-28 18:06:51 +08:00
Cheng Zhao
86cf5e0028 OVERRIDE => override in atom_api_tray.h 2014-11-28 17:54:38 +08:00
Cheng Zhao
89de5b6e9a win: Remove NotifyIconHostStateChanger
We don't need the ability it provided, and it is causing crashes on some
machines.

Fixes #850.
2014-11-28 17:47:47 +08:00
Cheng Zhao
ff26c3c16f Some coding style fixes 2014-11-28 15:59:03 +08:00
Cheng Zhao
8a736abac7 Merge pull request #870 from joaomoreno/popup
Allow positioning the context menu
2014-11-28 12:42:49 +08:00
Cheng Zhao
0397b282c0 Merge pull request #867 from IgorKlopov/patch-2
`subprocess.Popen` fails when Python is in "App Paths"
2014-11-28 11:47:57 +08:00
Cheng Zhao
d50a2b810d Merge pull request #866 from bwin/fix-typo
fix typo in variable name
2014-11-28 11:36:02 +08:00
Cheng Zhao
c5de8ea7bf Merge pull request #864 from IgorKlopov/patch-1
Lookup node in PATHs
2014-11-28 11:34:02 +08:00
Joao Moreno
c06e844ef4 fix build 2014-11-26 15:28:03 +01:00
Joao Moreno
c6a16161d9 Update documentation for Menu.popup() 2014-11-26 15:15:55 +01:00
Joao Moreno
46e6b5ec3e Allow positioning the context menu 2014-11-26 13:54:05 +01:00
IgorKlopov
0fd1f61a24 Paul suggests paths to be reversed 2014-11-26 01:43:30 +03:00
IgorKlopov
d8de9754d6 subprocess.Popen fails when Python is in "App Paths"
Win32. Python is not added to PATHs by default. Instead it is added to `App Paths` registry key ( http://msdn.microsoft.com/en-us/library/windows/desktop/ee872121(v=vs.85).aspx ). In both cases Python binary is found when i enter `python` command. But `subprocess.Popen` seems to fail when BOTH (1) runs a string `python tools/atom_source_root.py` AND (2) python is not in PATHs, only in App Paths. I suggest using list in <!( and hope this does not break linux/macos builds.
2014-11-25 14:16:17 -08:00
IgorKlopov
b00bbdeb81 Preserve that empty line 2014-11-25 13:54:02 -08:00
IgorKlopov
0ab4475f24 Compose full list in one place 2014-11-25 13:53:08 -08:00
IgorKlopov
5137e16485 WINDOWS_NODE_PATHs are to stay
WINDOWS_NODE_PATHs are checked first, and then os.environ['PATH']
2014-11-25 13:46:09 -08:00
Benjamin Winkler
bf85e61dc2 fix typo in variable name
This is just for the looks. No errors where throws, because the variable
name was misspelled in all occurences.
2014-11-25 20:57:55 +01:00
IgorKlopov
91a3e12ab0 Paul says lookup PATH
Works both with trailing slash `c:\nodejs\` and without it `c:\nodejs`
2014-11-25 11:41:11 -08:00
IgorKlopov
6aa6bdebe6 Travis says line too long
80 chars limit hit
2014-11-25 10:58:13 -08:00
IgorKlopov
1af0e0a762 Verbose required paths
I installed to `c:\nodejs` to avoid spaces in path (old habits die hard). So i had an obstacle you see.
2014-11-25 10:27:31 -08:00
Cheng Zhao
03f19bea6b Upgrade brightray for #849 2014-11-25 21:24:40 +08:00
Cheng Zhao
85a3e06718 Merge pull request #860 from rprichard/master
Move Linux pkg-config dependencies from atom-shell to brightray.
2014-11-25 21:23:49 +08:00
Cheng Zhao
8278d8b51a Merge pull request #862 from atom/window-state-events
Add window states events for BrowserWindow
2014-11-25 15:41:10 +08:00
Cheng Zhao
c19abed4fa spec: Don't test window state events in CI on Linux 2014-11-25 15:17:48 +08:00
Cheng Zhao
cef5f06ceb spec: Make timeout longer for window state tests 2014-11-25 15:06:57 +08:00
Cheng Zhao
a666014990 spec: Window state events 2014-11-25 14:52:49 +08:00
Cheng Zhao
5a8678b191 docs: Window state events 2014-11-25 14:43:11 +08:00
Cheng Zhao
271eb63083 SetFullscreen => SetFullScreen 2014-11-25 14:34:14 +08:00
Cheng Zhao
28ca883805 win: Implement window state events 2014-11-25 14:28:34 +08:00
Cheng Zhao
3c7e5e47b8 mac: Implement window state events 2014-11-25 13:16:51 +08:00
Cheng Zhao
588cc3c7ab Make WindowStateWatcher X11 only
On Windows we need to take another way of detecting window state events.
2014-11-25 13:05:04 +08:00
Cheng Zhao
b77e6c369a x11: Implement window state events 2014-11-25 12:43:25 +08:00
Cheng Zhao
06cc27c6b3 views: Add WindowStateWatcher 2014-11-25 11:46:30 +08:00
Ryan Prichard
73ee24bd98 Move Linux pkg-config dependencies from atom-shell to brightray. 2014-11-24 03:27:24 -08:00
Cheng Zhao
84fcfd1fac Merge pull request #858 from atom/wm-class
Use app's name for WM_CLASS
2014-11-24 16:12:07 +08:00
Cheng Zhao
cd5007cfa1 linux: Set WM_CLASS for devtools window 2014-11-24 16:04:41 +08:00
Cheng Zhao
172c55d194 linux: Use app's name for WM_CLASS 2014-11-24 15:51:26 +08:00
Cheng Zhao
60bd20872c linux: Set WM_WINDOW_ROLE correctly
WM_WINDOW_ROLE is used to specify the "role" of the window, and all
browser windows in atom-shell should have the same role.
2014-11-24 15:23:02 +08:00
Cheng Zhao
b2aaffa921 Upgrade node, fixes #843 2014-11-24 14:46:36 +08:00
Cheng Zhao
438d7ada49 Merge pull request #855 from paulcbetts/fix-webview-typo
Fix typo in method
2014-11-24 14:05:03 +08:00
Cheng Zhao
a9b1b567fb Fix capturePage API, closes #847 2014-11-24 13:44:45 +08:00
Paul Betts
2f530f7049 Downcast variable to appease clang 2014-11-23 13:52:59 -08:00
Paul Betts
dfcad75a27 Fix typo in method 2014-11-22 21:26:09 -08:00
Cheng Zhao
a0034521da Bump v0.19.4 2014-11-21 16:51:11 +08:00
Cheng Zhao
e4d9dbcfa2 Do not use no_overwrite mode.
Sometimes it would prevent uploading even when the file doesn't exist in
S3.
2014-11-21 16:41:16 +08:00
Cheng Zhao
ac914e1f19 OVERRODE => override in atom_main_delegate.h 2014-11-21 16:40:47 +08:00
Cheng Zhao
bed09839d5 Remove debugging print, closes #841 2014-11-21 16:39:16 +08:00
Cheng Zhao
8951572366 win: Fix crash when calling app.setName 2014-11-21 16:38:54 +08:00
Cheng Zhao
8a73d91ea1 Bump v0.19.3 2014-11-20 11:09:05 +08:00
Cheng Zhao
879de42372 Merge pull request #831 from atom/taskbar-extension
Add API for Windows jump list and Mac application dock menu
2014-11-18 11:39:30 +08:00
Cheng Zhao
32b8366d30 docs: Represented file of window 2014-11-18 11:27:08 +08:00
Cheng Zhao
95662d4233 docs: Progress bar in taskbar 2014-11-18 10:54:08 +08:00
Cheng Zhao
2f36216cb0 docs: Some tunes on desktop-environment-integration.md 2014-11-18 10:16:52 +08:00
Cheng Zhao
2513358eb5 docs: Add notes on Unity launcher 2014-11-17 22:00:56 +08:00
Cheng Zhao
21fa395b61 docs: Add "Desktop environment integration" 2014-11-17 21:40:07 +08:00
Cheng Zhao
afde383e28 docs: app.setUserTasks 2014-11-17 19:50:34 +08:00
Cheng Zhao
ee9964c141 AddUserTasks => setUserTasks 2014-11-17 19:32:11 +08:00
Cheng Zhao
bf66aeb8ee docs: Recent documents API 2014-11-17 19:02:37 +08:00
Cheng Zhao
f706bb45cb docs: app.dock.setMenu 2014-11-17 18:48:02 +08:00
Cheng Zhao
0b1b0940d2 Enable setting icon for addUserTasks 2014-11-17 17:35:51 +08:00
Cheng Zhao
0db2769781 Only "title" and "program" are required for AddUserTasks 2014-11-17 17:26:44 +08:00
Cheng Zhao
47c18fef7f win: Add app.addUserTasks API 2014-11-17 17:19:41 +08:00
Cheng Zhao
48412769df win: Add app.clearRecentDocuments API 2014-11-17 16:13:47 +08:00
Cheng Zhao
528f7bd45f win: Set app user model ID
This ID is used by Windows to identify your application.
2014-11-17 15:55:49 +08:00
Cheng Zhao
78322b5231 win: Implement Browser::AddRecentDocument 2014-11-17 15:53:18 +08:00
Cheng Zhao
c23ba7b504 mac: Add app.addRecentDocument API 2014-11-17 13:05:06 +08:00
Cheng Zhao
6aa69a06c8 mac: Release application delegate on exit 2014-11-17 09:52:24 +08:00
Cheng Zhao
0e94977d42 Add app.dock.setMenu API 2014-11-16 23:04:31 +08:00
Cheng Zhao
ba4f502b1e OVERRIDE => override in atom_api_app.h 2014-11-16 22:45:29 +08:00
Cheng Zhao
651dabf47e Fix displaying context menu for devtools 2014-11-16 22:34:29 +08:00
Cheng Zhao
af72842728 cocoa: Enable creating empty menu 2014-11-16 21:06:16 +08:00
Cheng Zhao
49ac363eef cocoa: Enable modifying initialized menu 2014-11-16 20:24:29 +08:00
Cheng Zhao
66bbf00b7a OVERRIDE => override in browser.h 2014-11-16 19:47:04 +08:00
Cheng Zhao
0398316192 views: Fix "visible" not working in menu bar, closes #825 2014-11-16 16:01:33 +08:00
Cheng Zhao
b428b2eb99 OVERRIDE => override in atom/browser/ui/views 2014-11-16 15:54:40 +08:00
Cheng Zhao
ab6cb042f6 OVERRIDE => override in atom_api_menu.h 2014-11-16 10:45:53 +08:00
Cheng Zhao
9c8b3e3c2e No . in commit message 2014-11-15 20:37:52 +08:00
Cheng Zhao
b27abd2011 Bump v0.19.2. 2014-11-15 15:18:01 +08:00
Cheng Zhao
bf1a4e12f1 Merge pull request #830 from paulcbetts/windows-build-instructions
Windows build instructions
2014-11-15 15:15:59 +08:00
Cheng Zhao
20acead8be apm@0.111.0 2014-11-15 11:25:50 +08:00
Paul Betts
d07482c5f6 Add a paragraph about modern.ie 2014-11-14 19:21:12 -08:00
Paul Betts
26ac34d0e0 Come Correct with 80-char wrapping 2014-11-14 19:21:04 -08:00
Cheng Zhao
b7816d85a1 Upgrade to Chrome 38.0.2125.122 2014-11-15 11:20:47 +08:00
Paul Betts
c99b20206c Misc copy fixups 2014-11-14 19:15:11 -08:00
Paul Betts
d97155d7b0 Point people towards VS2013 Community Edition 2014-11-14 19:14:27 -08:00
Paul Betts
10af87008d Remove Cygwin suggestion 2014-11-14 19:14:10 -08:00
Paul Betts
ed633b3250 Powershell'ify everything 2014-11-14 19:13:40 -08:00
Cheng Zhao
e0fddcb7ce Merge pull request #826 from statico/patch-1
Update Windows build instructions
2014-11-15 10:52:12 +08:00
Cheng Zhao
aa55e397d4 linux: Install libgconf2-dev in CI 2014-11-15 10:37:27 +08:00
Cheng Zhao
7943f7f7eb linux: Link necessary libraries
This fixes linking problem on some systems, see #500.
2014-11-15 10:16:48 +08:00
Cheng Zhao
869e086a41 Revert "Upgrade node for #811"
This reverts commit a96618e5cd.
2014-11-14 20:50:19 +08:00
Cheng Zhao
a96618e5cd Upgrade node for #811 2014-11-14 17:17:42 +08:00
Cheng Zhao
02b2459db6 Add <webview>.getId, fixes #818 2014-11-14 16:34:14 +08:00
Ian Langworth ☠
bef6909218 Update Windows build instructions
I encountered a few problems when trying to build atom-shell under Windows.
2014-11-13 19:11:56 -08:00
Cheng Zhao
1ade8dcee7 Merge pull request #823 from frankhale/win-file-dialog-default-path
win: Fix default path for native dialogs
2014-11-14 09:55:20 +08:00
Frank Hale
e1e1c173fe win: Fix default path for native dialogs 2014-11-13 14:33:25 -05:00
Cheng Zhao
5ee805e451 Merge pull request #817 from atom/menubar-dynamic-api
Add APIs to show/hide menu bar dynamically
2014-11-12 21:02:13 +08:00
Cheng Zhao
f2b91d5e1d docs: Menu bar APIs 2014-11-12 20:49:38 +08:00
Cheng Zhao
1cd3918494 views: Implement menubar APIs 2014-11-12 20:32:14 +08:00
Cheng Zhao
cb8f975528 Add JS menubar APIs 2014-11-12 20:31:55 +08:00
Cheng Zhao
42afc071eb OVERRIDE => override in native_window_views.h 2014-11-12 20:08:51 +08:00
Cheng Zhao
79d4724a15 Add a bunch of menu bar related APIs 2014-11-12 17:36:20 +08:00
Cheng Zhao
e699cac92c Merge pull request #816 from atom/browser-window-preload
Add "preload" option for BrowserWindow
2014-11-12 16:03:08 +08:00
Cheng Zhao
a3d2a490da docs: "preload" option of BrowserWindow 2014-11-12 15:51:48 +08:00
Cheng Zhao
58795eaa7e spec: "preload" option of BrowserWindow 2014-11-12 15:38:50 +08:00
Cheng Zhao
9f29f66768 Add "preload" option for BrowserWindow 2014-11-12 15:04:03 +08:00
Cheng Zhao
14d01544d4 Tidy code in CreateNonClientFrameView 2014-11-12 14:33:30 +08:00
Cheng Zhao
cf7cf098d8 Merge pull request #815 from frankhale/force-native-window
Force native window
2014-11-12 14:24:13 +08:00
Frank Hale
e9636bb87b Fix CPP formatting 2014-11-12 01:11:25 -05:00
Cheng Zhao
c82f5c8da8 Merge pull request #814 from atom/original-fs
Add original-fs module
2014-11-12 14:08:03 +08:00
Frank Hale
246a145930 Fix merge conflict with native_window_views.cc 2014-11-12 01:04:51 -05:00
Frank Hale
c9371bceec Force native window
- Force native frame and suppress the Chromium default blue frame. This
resolves issues with Windows systems that are running in VM's and cannot
enable Aero Glass. Atom-Shell was adding the default Chromium blue frame
even when frame was set to false in the BrowserWindow options.
2014-11-12 00:45:21 -05:00
Cheng Zhao
bd1f0e78a8 docs: original-fs module 2014-11-12 11:58:03 +08:00
Cheng Zhao
90c24de0f0 spec: original-fs module 2014-11-12 11:31:31 +08:00
Cheng Zhao
5cb97545fd Add original-fs module 2014-11-12 11:09:59 +08:00
Cheng Zhao
db8361a0a9 spec: "httpreferrer" attribute of <webview> 2014-11-12 10:39:28 +08:00
Cheng Zhao
57bfc63d23 docs: "httpreferrer" attribute of <webview> 2014-11-12 10:34:54 +08:00
Cheng Zhao
fbd74c0e2d Various fixes of #801 2014-11-12 10:28:50 +08:00
Cheng Zhao
993c52dcd5 Merge pull request #801 from frankhale/http-referrer
Add http referrer to LoadUrl and Webview
2014-11-12 10:10:24 +08:00
Cheng Zhao
f5a8ec0cd3 Merge pull request #800 from frankhale/windows-min-max-animation
Fix Windows min/max animation on frameless windows
2014-11-12 09:59:53 +08:00
Frank Hale
747698fe9b Fix code style formatting
- Fix code style formatting to be <= 80 lines
- Add default parameter for urlOptions to loadUrl, reload and
reloadIgnoringCache functions to be compatible with old API.
2014-11-11 13:33:15 -05:00
Frank Hale
e0dae4054a Fix code style to be <= 80 lines 2014-11-11 13:09:54 -05:00
Frank Hale
070d26e68e Merge branch 'master' into windows-min-max-animation 2014-11-11 13:08:27 -05:00
Frank Hale
e6830e9ac8 Merge branch 'master' into http-referrer 2014-11-11 11:47:35 -05:00
Cheng Zhao
aba3b721c5 Merge pull request #810 from atom/report-back-crash-id
WIP: Add API to get last crash report ID
2014-11-11 20:23:53 +08:00
Cheng Zhao
62fd76f7e4 docs: crashRepoter.getLastCrashReport 2014-11-11 20:20:36 +08:00
Cheng Zhao
66e96f69fc Add crashRepoter.getLastCrashReport API 2014-11-11 17:30:01 +08:00
Cheng Zhao
9a825c5cbd win: Writes uploads.log 2014-11-11 16:38:16 +08:00
Cheng Zhao
02bcdc1c19 linux: Put "uploads.log" under "/tmp/ProductName Crashes/" 2014-11-11 13:30:06 +08:00
Cheng Zhao
f13d8407ee linux: Put crash dumps under "/tmp/ProductName Crashes/" 2014-11-11 13:03:47 +08:00
Cheng Zhao
739c432c98 linux: Writes crash report upload log 2014-11-11 12:24:33 +08:00
Cheng Zhao
94084639f2 Merge pull request #806 from atom/symbols-server
Upload PDB to S3 when publishing and add docs on setting up symbol server
2014-11-11 09:28:39 +08:00
Cheng Zhao
e6f748d77f Merge pull request #807 from paulcbetts/patch-1
Ports are limited to 64k
2014-11-11 09:17:36 +08:00
Paul Betts
212cd67f08 Ports are limited to 64k 2014-11-10 11:53:12 -08:00
Cheng Zhao
90480fff4e Fix pylint warnings 2014-11-10 23:33:56 +08:00
Cheng Zhao
4a1b6d76b2 docs: Update symbol server address 2014-11-10 23:24:13 +08:00
Cheng Zhao
6d663d1d01 Use lowercase for symbol paths 2014-11-10 23:07:57 +08:00
Cheng Zhao
e5e94ed437 Add execution bit 2014-11-10 23:02:54 +08:00
Cheng Zhao
621867e518 docs: Setting up symbol server in debugger 2014-11-10 16:09:13 +08:00
Cheng Zhao
716037544a views: Fix showing menu bar when pressing Alt for a long time 2014-11-07 21:59:26 -05:00
Cheng Zhao
b92d5071fa views: Make auto-hide-menu-bar work when NumLock is on, fixes #796 2014-11-07 21:59:26 -05:00
Frank Hale
ef255db069 Making Http Referrer addition better!
- Code cleanup
2014-11-07 21:54:36 -05:00
Frank Hale
24f8c51959 Make sure frame is frameless 2014-11-07 13:34:52 -05:00
Frank Hale
4b20ac3dc6 Fix Windows min/max animation on frameless windows
- Frameless windows disappeared or appears when minimized and maximized
on Windows. This commit fixes that.
2014-11-07 13:13:12 -05:00
Cheng Zhao
34521e5880 Upload PDBs to Windows symbol server when publishing 2014-11-07 22:52:00 +08:00
Cheng Zhao
45fb3ec41d Don't overwrite files on S3 2014-11-07 21:45:40 +08:00
Cheng Zhao
caa0634df8 Upload symbols to S3 2014-11-07 20:51:25 +08:00
Cheng Zhao
15a05b3639 Add script to call symstore 2014-11-07 20:23:13 +08:00
Cheng Zhao
edcae49e52 views: Fix showing menu bar when pressing Alt for a long time 2014-11-07 15:20:16 +08:00
Cheng Zhao
81283db2da views: Make auto-hide-menu-bar work when NumLock is on, fixes #796 2014-11-07 15:05:55 +08:00
Frank Hale
f56d1ea7b4 Add support for setting http referrer
- Add url option to specify the http referrer
- Add httpReferrer attribute to webview

NOTE: This is still not complete. Some love has to be done to
guest-view-manager.coffee and very likely the function calls called
createGuest and to the code that uses them.
2014-11-06 14:29:41 -05:00
Cheng Zhao
fea5559fbc Upgrade node, fixes #634 2014-11-06 21:27:16 +08:00
Cheng Zhao
b360122b35 Add spec for #634 2014-11-06 21:26:54 +08:00
Cheng Zhao
185d3a7c02 Upgrade brightray for #646 2014-11-06 19:09:10 +08:00
Cheng Zhao
f90fb8cc72 Print error when "preload" script is not found 2014-11-06 16:12:40 +08:00
Cheng Zhao
111dcbac25 Merge pull request #794 from atom/webivew-preload
Add "preload" attribute for <webview>
2014-11-06 16:04:36 +08:00
Cheng Zhao
e28bdcdd46 docs: "preload" attribute of <webview> 2014-11-06 15:51:33 +08:00
Cheng Zhao
395b0c4224 spec: "preload" attribute of <webview> 2014-11-06 15:23:42 +08:00
Cheng Zhao
217b1afe87 Load the "preload" script in <webview> 2014-11-06 15:13:37 +08:00
Cheng Zhao
8d8bfcd120 Pass "preload" attribute to GuestViewManager 2014-11-06 14:35:32 +08:00
Cheng Zhao
2637cafda5 Merge pull request #791 from brentertz/online-offline-events-tutorial
Online/offline event detection tutorial
2014-11-06 14:02:42 +08:00
Cheng Zhao
c764b7b023 docs: Mention the side effect of "fullscreen" option, fixes #792 2014-11-06 10:16:28 +08:00
Brent Ertz
522ae765ea Updates per PR feedback
* Use backticks instead of quotes around code object
* Remove path.join usage
* Dasherize event names
2014-11-05 11:21:18 -07:00
Brent Ertz
9cf3811a56 Add tutorial on online/offline event detection 2014-11-05 07:49:50 -07:00
Cheng Zhao
6d2cc8aedf Merge pull request #790 from atom/error-box
Fix crash when showing error dialog before GUI environment is initialized
2014-11-05 20:25:04 +08:00
Cheng Zhao
058046304d Forbid using dialog module before app is ready 2014-11-05 19:50:24 +08:00
Cheng Zhao
7ff0e0214e linux: Use GTK+ for error reporting when GUI is ready 2014-11-05 19:27:43 +08:00
Cheng Zhao
2be5393768 Don't print error to console in default_app 2014-11-05 19:08:09 +08:00
Cheng Zhao
b54caccb22 linux: Print error to console when GUI is not ready 2014-11-05 19:08:00 +08:00
Cheng Zhao
c499dfbb22 mac: Implement dialog.showErrorBox 2014-11-05 17:27:04 +08:00
Cheng Zhao
f6ba308ff8 Use dialog.showErrorBox for showing errors 2014-11-05 16:05:29 +08:00
Cheng Zhao
10e195a444 win: Implement dialog.showErrorBox 2014-11-05 16:05:11 +08:00
Cheng Zhao
490a12d38a Add dialog.showErrorBox API 2014-11-05 16:04:39 +08:00
Cheng Zhao
e004d53d2a Merge pull request #787 from atom/webview-plugins
Add "plugins" attribute for <webview>
2014-11-05 15:18:19 +08:00
Cheng Zhao
4788323582 docs: "plugins" attribute of <webview> 2014-11-05 15:02:37 +08:00
Cheng Zhao
80d574482e Add "plugins" attribute for <webview> 2014-11-05 14:59:28 +08:00
Cheng Zhao
d1724ad733 Bump v0.19.1. 2014-11-04 19:19:31 +08:00
Cheng Zhao
1fbe05b2d5 Merge pull request #779 from atom/new-window-disposition
Emit "new-window" event for dispositions other than current tab
2014-11-04 18:59:58 +08:00
Cheng Zhao
c5212b36f7 External links should have "foreground-tab" disposition 2014-11-04 18:49:57 +08:00
Cheng Zhao
033212841d docs: Document the disposition parameter 2014-11-04 18:37:06 +08:00
Cheng Zhao
22c5720aa2 Window opened by window.open should have "default" disposition 2014-11-04 18:31:47 +08:00
Cheng Zhao
f29c7164f3 Translate |disposition| to string 2014-11-04 18:12:57 +08:00
Cheng Zhao
013593ccf8 Emit "new-window" event for dispositions other than CURRENT_TAB 2014-11-04 17:59:15 +08:00
Cheng Zhao
77724345c4 Upgrade brightray, fixes #769 2014-11-04 10:01:17 +08:00
Cheng Zhao
4c12a4369d Fixes Event.prevenDefault() not working, closes #771 2014-11-03 23:24:20 +08:00
Cheng Zhao
a3a21b5b88 Merge pull request #778 from atom/project-infinium-webview-devtools
devtools for webview tags (continue work of #774)
2014-11-03 23:10:09 +08:00
Cheng Zhao
48d54e8d3a Fix JavaScript errors in webview 2014-11-03 22:18:03 +08:00
Cheng Zhao
4ebe58df57 Also add closeDevTools and isDevToolsOpened for webview 2014-11-03 22:12:56 +08:00
Cheng Zhao
accd08a2bf Show devtools for guest page in undocked mode 2014-11-03 21:48:25 +08:00
Cheng Zhao
1731d609b7 Fix double freeing WebContents 2014-11-03 19:45:09 +08:00
Cheng Zhao
cf9f249f07 Merge branch 'webview-devtools' of https://github.com/project-infinium/atom-shell into project-infinium-webview-devtools 2014-11-03 18:42:18 +08:00
Cheng Zhao
92cfd96933 Merge pull request #777 from atom/web-dialog
Implement file dialog and color chooser for <input> tag
2014-11-03 17:47:08 +08:00
gray
6c3f065147 force devtools to show as undocked. 2014-11-02 11:32:06 -08:00
gray
45f4a25ac9 fix for cpplint 2014-11-02 07:32:33 -08:00
gray
f43c227806 update and document openDevTools on web view. 2014-11-02 07:20:10 -08:00
Kevin Sawicki
490efe69f4 📝 a -> an 2014-11-02 07:20:00 -08:00
gray
368d23ef5b add open devtools api to webview tag 2014-11-02 06:34:22 -08:00
Cheng Zhao
5e99c8f280 Merge pull request #763 from paulcbetts/dont-hardcode-atom-lib
Don't hard-code the atom.lib file
2014-11-01 18:55:49 +08:00
Cheng Zhao
914dce6cc2 win: Add color chooser dialog 2014-11-01 13:44:28 +08:00
Paul Betts
c6697f5f07 Use project_name for the lib file 2014-10-31 11:33:29 -07:00
Kevin Sawicki
b6b6fc3bfd Remove All Rights Reserved after GitHub copyright
Closes #762
2014-10-31 11:17:05 -07:00
Cheng Zhao
de49498102 aura: Add color chooser dialog 2014-10-31 23:06:50 +08:00
Cheng Zhao
14c9a2a087 mac: Add color chooser dialog 2014-10-31 22:53:15 +08:00
Cheng Zhao
a4a390b2cc Upgrade brightray to handle localized string 2014-10-31 19:42:36 +08:00
Cheng Zhao
0f5a058bdd Implement RunFileChooser 2014-10-31 19:27:01 +08:00
Cheng Zhao
7d15aa2321 OVERRIDE => override in atom_browser_client.h 2014-10-31 18:26:01 +08:00
Cheng Zhao
9b1bcf51c6 Implement EnumerateDirectory 2014-10-31 17:37:32 +08:00
Cheng Zhao
b710cc3063 Add WebDialogHelper 2014-10-31 00:37:14 +08:00
Kevin Sawicki
1c91b4888a Merge pull request #754 from Subash/master
Update web-view-tag.md
2014-10-30 09:18:40 -07:00
Subash Pathak
996e2bdc69 Update web-view-tag.md 2014-10-30 20:52:00 +05:45
Cheng Zhao
9ed6ad8165 Forbid using protocol module before app is ready, fixes #661 2014-10-30 22:27:29 +08:00
Cheng Zhao
c0cd8fca80 Upgrade native_mate, fixes #660 2014-10-30 21:55:03 +08:00
Cheng Zhao
25f69df341 Throw error when BrowserWindow is created before app is ready 2014-10-30 21:32:35 +08:00
Cheng Zhao
35e5c2172f Bump v0.19.0. 2014-10-30 12:02:42 +08:00
Cheng Zhao
41b6f682d8 Merge pull request #750 from atom/fix-leaking-webcontents
Handle window.open and <a target="..."> correctly
2014-10-28 19:23:59 +08:00
Cheng Zhao
0c21c863d7 Simplify the GuestWindowManager
Instead of recording guest explicitly in a map, we just make use of
closure for bookkeeping.
2014-10-28 18:51:28 +08:00
Cheng Zhao
c71aa0995a Reuse the window of same frame name 2014-10-28 13:23:25 +08:00
Cheng Zhao
8359c8e194 spec: Only test net.connect on Mac
The Linux travis ci machine is quite unstable on this test.
2014-10-28 10:09:47 +08:00
Kevin Sawicki
209dcd1aca Merge pull request #747 from stefanbuck/patch-1
fix broken links
2014-10-27 14:45:21 -07:00
Stefan Buck
eaa5e136b6 fix broken links 2014-10-27 22:43:29 +01:00
Cheng Zhao
89990ec037 Don't throw exception on closed guest window 2014-10-27 23:59:11 +08:00
Cheng Zhao
cc9ff77dd2 Make <a target="_blank"> open window by default 2014-10-27 23:46:47 +08:00
Cheng Zhao
f44be28309 doc: "new-window" event of WebContents 2014-10-27 23:27:33 +08:00
Cheng Zhao
7f4d00fac0 Add eval() for FakeWindow 2014-10-27 23:07:41 +08:00
Cheng Zhao
bdad1d1753 Add focus() and blur() for FakeWindow 2014-10-27 23:03:05 +08:00
Cheng Zhao
64ce44d341 spec: "new-window" event of BrowserWindow 2014-10-27 22:08:24 +08:00
Cheng Zhao
6f41598962 Use GuestWindowManager to mange windows created by window.open 2014-10-27 21:56:04 +08:00
Cheng Zhao
9c92f2e692 spec: "new-window" event of <webview> 2014-10-27 19:26:45 +08:00
Cheng Zhao
fefeb39757 Add "frameName" as paramter for "new-window" event 2014-10-27 19:14:57 +08:00
Cheng Zhao
389e56ce36 Route window.open to "new-window" event 2014-10-27 18:52:55 +08:00
Cheng Zhao
94818aef26 Set "defaultPrevented" when "preventDefault()" is called 2014-10-27 17:55:28 +08:00
Cheng Zhao
e9b344b200 OVERRIDE => override in atom_api_window.h 2014-10-27 16:58:35 +08:00
Cheng Zhao
fb864a8f23 Prevent creating popup window from inside WebContents 2014-10-27 16:56:28 +08:00
Cheng Zhao
cf4c2d02f3 OVERRIDE => override in native_window.h 2014-10-27 16:47:50 +08:00
Cheng Zhao
b3dc0bc57e Upgrade brightray 2014-10-27 16:47:38 +08:00
Cheng Zhao
0839915538 Merge pull request #740 from atom/webview
Implement <webview> tag
2014-10-26 19:43:52 +08:00
Cheng Zhao
9e32570dfa Merge pull request #742 from patr0nus/yosemite-fix
Yosemite build fix
2014-10-26 19:36:08 +08:00
Cheng Zhao
404e08c0e7 Make remote.getCurrentWindow() work in <webview> 2014-10-26 19:30:53 +08:00
Cheng Zhao
10a8f3c884 Make <webview> work with plugins turned off 2014-10-26 14:05:54 +08:00
Kevin Sawicki
9f8ad36f30 📝 Minor grammar tweaks 2014-10-25 16:03:27 -07:00
Kevin Sawicki
8a4e0a64cf 📝 codes -> code 2014-10-25 16:00:23 -07:00
Cheng Zhao
db071f8d8e Add specs for <webview> 2014-10-25 23:23:49 +08:00
Cheng Zhao
24b4fcea15 Add BIND_DONE event for process object 2014-10-25 23:21:17 +08:00
Cheng Zhao
e110f5c37c Remove unneeded cleanup code 2014-10-25 23:09:45 +08:00
Cheng Zhao
1a93babdbc Fix double freeing guest 2014-10-25 22:01:24 +08:00
Cheng Zhao
22e3b9df44 Add attribute to turn on node integration in <webview> 2014-10-25 20:52:42 +08:00
Cheng Zhao
d596a7427e Node integration option is now only true/false 2014-10-25 19:20:04 +08:00
Cheng Zhao
81170d81b3 Remove iframe related security code 2014-10-25 19:08:21 +08:00
Cheng Zhao
e7825da0f8 Upgrade libchromiumcontent to discard iframe security settings 2014-10-25 18:53:24 +08:00
Cheng Zhao
f629fa7b27 Detect node integration in JavaScript 2014-10-25 18:51:26 +08:00
Cheng Zhao
04f1860bf5 Make autoresize follow Chrome's behavior 2014-10-25 16:04:16 +08:00
Cheng Zhao
69bcc8e831 Add docs on our custom web elements 2014-10-25 14:58:32 +08:00
Cheng Zhao
194ed3884c Add 'new-window' event for <webview> 2014-10-25 13:21:09 +08:00
Cheng Zhao
d8447524cb Allow passing V8 objects in EventEmitter 2014-10-25 11:30:35 +08:00
patr0nus
915a6196cc Remove the deprecated convertScreenToBase and convertBaseToScreen. 2014-10-25 11:06:39 +08:00
patr0nus
623e3ebc03 Fix type convertion errors. 2014-10-25 11:06:10 +08:00
Cheng Zhao
485bd7bbd3 Add 'close' and 'console-message' for <webview> 2014-10-25 10:01:19 +08:00
Cheng Zhao
218d69d288 Dispatch WebContents events to <webview> 2014-10-25 09:05:50 +08:00
Cheng Zhao
d63f44cd07 Add more events for WebContents 2014-10-24 23:05:25 +08:00
Cheng Zhao
2d56067819 Fix creating window in <webview> 2014-10-24 22:14:12 +08:00
Cheng Zhao
a96cde254b Send unhandled key event to embedder 2014-10-24 21:46:47 +08:00
Cheng Zhao
e214ce6bc4 Add WebContents.insertCSS 2014-10-24 21:04:50 +08:00
Cheng Zhao
1f08d50e98 Add WebContents.setUserAgent 2014-10-24 20:57:44 +08:00
Cheng Zhao
07a8a50861 Bind WebContents APIs to <webview> 2014-10-24 20:49:51 +08:00
Cheng Zhao
46ed83a057 Assign a new SiteInstance for guest 2014-10-24 20:20:56 +08:00
Cheng Zhao
e95c1256a0 Add remote.getGuestWebContents 2014-10-24 19:57:29 +08:00
Cheng Zhao
c0955eaa90 Don't expose <webview> in guest 2014-10-24 19:18:58 +08:00
Cheng Zhao
58a38d90b8 Don't fork renderer process for guest 2014-10-24 19:08:26 +08:00
Cheng Zhao
4ccb0cccf3 Rename web-view module to web-frame 2014-10-24 18:45:03 +08:00
Cheng Zhao
4f43c41577 Enable navigation from webview 2014-10-24 18:44:32 +08:00
Cheng Zhao
6336edbe92 Implement allowtransparency attribute 2014-10-24 16:48:21 +08:00
Cheng Zhao
ce793ec86d Destroy guest when the embedder is gone 2014-10-24 16:19:00 +08:00
Cheng Zhao
993f66bd02 Fix initializing webview 2014-10-24 16:09:18 +08:00
Cheng Zhao
39e75574f4 Attach <webview> with guest WebContents 2014-10-24 14:37:14 +08:00
Cheng Zhao
2d8fe489a7 Add converters between gfx:: and v8 2014-10-24 12:48:52 +08:00
Cheng Zhao
5b167e3684 Mention clang 3.4 is required, refs #735 2014-10-24 09:55:31 +08:00
Cheng Zhao
dacbf7a042 Register guest web view 2014-10-23 23:08:48 +08:00
Cheng Zhao
81599f1535 Use old PLUGIN_METHOD_ATTACH for webview 2014-10-23 20:28:31 +08:00
Cheng Zhao
a22a5c67bd Implement GuestViewInternal.createGuest and destroyGuest 2014-10-23 17:54:52 +08:00
Cheng Zhao
d34cff2eef api: Add webContent.create() to create detached WebContents 2014-10-23 14:04:13 +08:00
Cheng Zhao
c72d769ff0 Make WebContents cache object template 2014-10-23 13:31:10 +08:00
Cheng Zhao
97139b7487 Fix js errors in webview 2014-10-22 23:37:27 +08:00
Cheng Zhao
d26dcd5501 Schemas should be registered early 2014-10-22 23:36:31 +08:00
Cheng Zhao
380de24f2e Add code to register <webview> tag 2014-10-22 22:55:13 +08:00
Cheng Zhao
e7c7e086b1 Add API to register custom element 2014-10-22 21:01:12 +08:00
339 changed files with 7080 additions and 3058 deletions

View File

@@ -29,6 +29,8 @@
'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',
@@ -36,6 +38,7 @@
'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/original-fs.coffee',
'atom/common/api/lib/screen.coffee',
'atom/common/api/lib/shell.coffee',
'atom/common/lib/init.coffee',
@@ -44,16 +47,19 @@
'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/web-view.coffee',
'atom/renderer/api/lib/web-frame.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/browser/api/atom_api_app.cc',
'atom/browser/api/atom_api_app.h',
'atom/browser/api/atom_api_auto_updater.cc',
@@ -100,8 +106,6 @@
'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',
@@ -176,8 +180,16 @@
'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/web_view_manager.cc',
'atom/browser/web_view/web_view_manager.h',
'atom/browser/web_view/web_view_renderer_state.cc',
'atom/browser/web_view/web_view_renderer_state.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',
@@ -222,6 +234,7 @@
'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.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',
@@ -248,8 +261,8 @@
'atom/renderer/api/atom_api_renderer_ipc.cc',
'atom/renderer/api/atom_renderer_bindings.cc',
'atom/renderer/api/atom_renderer_bindings.h',
'atom/renderer/api/atom_api_web_view.cc',
'atom/renderer/api/atom_api_web_view.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',
@@ -271,6 +284,7 @@
'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',
@@ -281,8 +295,6 @@
'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/printing/printing_ui_web_contents_observer.cc',
'chromium_src/chrome/browser/printing/printing_ui_web_contents_observer.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',
@@ -293,14 +305,12 @@
'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/libgtk2ui/app_indicator_icon_menu.cc',
'chromium_src/chrome/browser/ui/libgtk2ui/app_indicator_icon_menu.h',
'chromium_src/chrome/browser/ui/libgtk2ui/gtk2_status_icon.cc',
'chromium_src/chrome/browser/ui/libgtk2ui/gtk2_status_icon.h',
'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/browser/ui/views/status_icons/status_tray_state_changer_win.cc',
'chromium_src/chrome/browser/ui/views/status_icons/status_tray_state_changer_win.h',
'chromium_src/chrome/common/print_messages.cc',
'chromium_src/chrome/common/print_messages.h',
'chromium_src/chrome/common/tts_messages.h',
@@ -309,7 +319,7 @@
'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_win.cc',
'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/tts_dispatcher.cc',
'chromium_src/chrome/renderer/tts_dispatcher.h',
@@ -319,6 +329,11 @@
'chromium_src/library_loaders/libspeechd.h',
'<@(native_mate_files)',
],
'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.cc',
'atom/app/atom_library_main.h',
@@ -331,7 +346,7 @@
'sk', 'sl', 'sr', 'sv', 'sw', 'ta', 'te', 'th', 'tr', 'uk',
'vi', 'zh-CN', 'zh-TW',
],
'atom_source_root': '<!(python tools/atom_source_root.py)',
'atom_source_root': '<!(["python", "tools/atom_source_root.py"])',
'conditions': [
['OS=="win"', {
'app_sources': [
@@ -461,10 +476,10 @@
'<(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)/webkit_resources_200_percent.pak',
'external_binaries/d3dcompiler_43.dll',
'external_binaries/d3dcompiler_46.dll',
'external_binaries/msvcp120.dll',
'external_binaries/msvcr120.dll',
'external_binaries/vccorlib120.dll',
@@ -510,6 +525,8 @@
'defines': [
# This is defined in skia/skia_common.gypi.
'SK_SUPPORT_LEGACY_GETTOPDEVICE',
# Disable warnings for g_settings_list_schemas.
'GLIB_DISABLE_DEPRECATION_WARNINGS',
],
'sources': [
'<@(lib_sources)',
@@ -538,6 +555,9 @@
],
'conditions': [
['OS=="win"', {
'sources': [
'<@(lib_sources_win)',
],
'link_settings': {
'libraries': [
'-limm32.lib',
@@ -565,10 +585,6 @@
'-rpath \$$ORIGIN',
# Make native module dynamic loading work.
'-rdynamic',
'<!@(pkg-config --libs-only-L --libs-only-other dbus-1)',
],
'libraries': [
'<!@(pkg-config --libs-only-l dbus-1)',
],
},
# Required settings of using breakpad.
@@ -867,13 +883,14 @@
{
'action_name': 'Make Empty Paks',
'inputs': [
'tools/posix/make_locale_paks.sh',
'tools/make_locale_paks.py',
],
'outputs': [
'<(PRODUCT_DIR)/locales'
],
'action': [
'tools/posix/make_locale_paks.sh',
'python',
'tools/make_locale_paks.py',
'<(PRODUCT_DIR)',
'<@(locales)',
],
@@ -895,7 +912,7 @@
{
'action_name': 'Create node.lib',
'inputs': [
'<(PRODUCT_DIR)/atom.lib',
'<(PRODUCT_DIR)/<(project_name).lib',
'<(libchromiumcontent_library_dir)/chromiumcontent.dll.lib',
],
'outputs': [
@@ -915,31 +932,5 @@
}, # target generate_node_lib
],
}], # OS==win
# Using Visual Studio Express.
['msvs_express==1', {
'target_defaults': {
'defines!': [
'_SECURE_ATL',
],
'msvs_settings': {
'VCLibrarianTool': {
'AdditionalLibraryDirectories': [
'<(atom_source_root)/external_binaries/atl/lib',
],
},
'VCLinkerTool': {
'AdditionalLibraryDirectories': [
'<(atom_source_root)/external_binaries/atl/lib',
],
'AdditionalDependencies': [
'atls.lib',
],
},
},
'msvs_system_include_dirs': [
'<(atom_source_root)/external_binaries/atl/include',
],
},
}], # msvs_express==1
],
}

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -111,7 +111,7 @@ void AtomMainDelegate::AddDataPackFromPath(
pak_dir.Append(FILE_PATH_LITERAL("ui_resources_200_percent.pak")),
ui::SCALE_FACTOR_200P);
bundle->AddDataPackFromPath(
pak_dir.Append(FILE_PATH_LITERAL("webkit_resources_200_percent.pak")),
pak_dir.Append(FILE_PATH_LITERAL("content_resources_200_percent.pak")),
ui::SCALE_FACTOR_200P);
#endif
}

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -17,20 +17,15 @@ class AtomMainDelegate : public brightray::MainDelegate {
protected:
// content::ContentMainDelegate:
virtual bool BasicStartupComplete(int* exit_code) OVERRIDE;
virtual void PreSandboxStartup() OVERRIDE;
virtual content::ContentBrowserClient* CreateContentBrowserClient() OVERRIDE;
virtual content::ContentRendererClient*
CreateContentRendererClient() OVERRIDE;
bool BasicStartupComplete(int* exit_code) override;
void PreSandboxStartup() override;
content::ContentBrowserClient* CreateContentBrowserClient() override;
content::ContentRendererClient* CreateContentRendererClient() override;
// brightray::MainDelegate:
virtual scoped_ptr<brightray::ContentClient> CreateContentClient() OVERRIDE;
virtual void AddDataPackFromPath(
ui::ResourceBundle* bundle, const base::FilePath& pak_dir) OVERRIDE;
#if defined(OS_MACOSX)
virtual void OverrideChildProcessPath() OVERRIDE;
virtual void OverrideFrameworkBundlePath() OVERRIDE;
#endif
scoped_ptr<brightray::ContentClient> CreateContentClient() override;
void AddDataPackFromPath(
ui::ResourceBundle* bundle, const base::FilePath& pak_dir) override;
private:
brightray::ContentClient content_client_;

View File

@@ -1,37 +0,0 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "atom/app/atom_main_delegate.h"
#include "base/mac/bundle_locations.h"
#include "base/files/file_path.h"
#include "base/path_service.h"
#include "brightray/common/mac/main_application_bundle.h"
#include "content/public/common/content_paths.h"
namespace atom {
namespace {
base::FilePath GetFrameworksPath() {
return brightray::MainApplicationBundlePath().Append("Contents")
.Append("Frameworks");
}
} // namespace
void AtomMainDelegate::OverrideFrameworkBundlePath() {
base::mac::SetOverrideFrameworkBundlePath(
GetFrameworksPath().Append("Atom Framework.framework"));
}
void AtomMainDelegate::OverrideChildProcessPath() {
base::FilePath helper_path = GetFrameworksPath().Append("Atom Helper.app")
.Append("Contents")
.Append("MacOS")
.Append("Atom Helper");
PathService::Override(content::CHILD_PROCESS_EXE, helper_path);
}
} // namespace atom

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -7,6 +7,7 @@
#include <string>
#include <vector>
#include "atom/browser/api/atom_api_menu.h"
#include "atom/browser/atom_browser_context.h"
#include "atom/browser/browser.h"
#include "atom/common/native_mate_converters/file_path_converter.h"
@@ -32,6 +33,32 @@
using atom::Browser;
namespace mate {
#if defined(OS_WIN)
template<>
struct Converter<Browser::UserTask> {
static bool FromV8(v8::Isolate* isolate, v8::Handle<v8::Value> val,
Browser::UserTask* out) {
mate::Dictionary dict;
if (!ConvertFromV8(isolate, val, &dict))
return false;
if (!dict.Get("program", &(out->program)) ||
!dict.Get("title", &(out->title)))
return false;
if (dict.Get("iconPath", &(out->icon_path)) &&
!dict.Get("iconIndex", &(out->icon_index)))
return false;
dict.Get("arguments", &(out->arguments));
dict.Get("description", &(out->description));
return true;
}
};
#endif
} // namespace mate
namespace atom {
namespace api {
@@ -148,20 +175,23 @@ void App::SetDesktopName(const std::string& desktop_name) {
mate::ObjectTemplateBuilder App::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
Browser* browser = Browser::Get();
auto browser = base::Unretained(Browser::Get());
return mate::ObjectTemplateBuilder(isolate)
.SetMethod("quit", base::Bind(&Browser::Quit,
base::Unretained(browser)))
.SetMethod("focus", base::Bind(&Browser::Focus,
base::Unretained(browser)))
.SetMethod("getVersion", base::Bind(&Browser::GetVersion,
base::Unretained(browser)))
.SetMethod("setVersion", base::Bind(&Browser::SetVersion,
base::Unretained(browser)))
.SetMethod("getName", base::Bind(&Browser::GetName,
base::Unretained(browser)))
.SetMethod("setName", base::Bind(&Browser::SetName,
base::Unretained(browser)))
.SetMethod("quit", base::Bind(&Browser::Quit, browser))
.SetMethod("focus", base::Bind(&Browser::Focus, browser))
.SetMethod("getVersion", base::Bind(&Browser::GetVersion, browser))
.SetMethod("setVersion", base::Bind(&Browser::SetVersion, browser))
.SetMethod("getName", base::Bind(&Browser::GetName, browser))
.SetMethod("setName", base::Bind(&Browser::SetName, browser))
.SetMethod("isReady", base::Bind(&Browser::is_ready, browser))
.SetMethod("addRecentDocument",
base::Bind(&Browser::AddRecentDocument, browser))
.SetMethod("clearRecentDocuments",
base::Bind(&Browser::ClearRecentDocuments, browser))
#if defined(OS_WIN)
.SetMethod("setUserTasks",
base::Bind(&Browser::SetUserTasks, browser))
#endif
.SetMethod("getDataPath", &App::GetDataPath)
.SetMethod("resolveProxy", &App::ResolveProxy)
.SetMethod("setDesktopName", &App::SetDesktopName);
@@ -196,12 +226,15 @@ int DockBounce(const std::string& type) {
request_id = Browser::Get()->DockBounce(Browser::BOUNCE_INFORMATIONAL);
return request_id;
}
void DockSetMenu(atom::api::Menu* menu) {
Browser::Get()->DockSetMenu(menu->model());
}
#endif
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
v8::Handle<v8::Context> context, void* priv) {
v8::Isolate* isolate = context->GetIsolate();
Browser* browser = Browser::Get();
CommandLine* command_line = CommandLine::ForCurrentProcess();
mate::Dictionary dict(isolate, exports);
@@ -211,20 +244,17 @@ void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
base::Bind(&CommandLine::AppendArg,
base::Unretained(command_line)));
#if defined(OS_MACOSX)
auto browser = base::Unretained(Browser::Get());
dict.SetMethod("dockBounce", &DockBounce);
dict.SetMethod("dockCancelBounce",
base::Bind(&Browser::DockCancelBounce,
base::Unretained(browser)));
base::Bind(&Browser::DockCancelBounce, browser));
dict.SetMethod("dockSetBadgeText",
base::Bind(&Browser::DockSetBadgeText,
base::Unretained(browser)));
base::Bind(&Browser::DockSetBadgeText, browser));
dict.SetMethod("dockGetBadgeText",
base::Bind(&Browser::DockGetBadgeText,
base::Unretained(browser)));
dict.SetMethod("dockHide",
base::Bind(&Browser::DockHide, base::Unretained(browser)));
dict.SetMethod("dockShow",
base::Bind(&Browser::DockShow, base::Unretained(browser)));
base::Bind(&Browser::DockGetBadgeText, browser));
dict.SetMethod("dockHide", base::Bind(&Browser::DockHide, browser));
dict.SetMethod("dockShow", base::Bind(&Browser::DockShow, browser));
dict.SetMethod("dockSetMenu", &DockSetMenu);
#endif
}

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -33,20 +33,19 @@ class App : public mate::EventEmitter,
App();
virtual ~App();
// BrowserObserver implementations:
virtual void OnWillQuit(bool* prevent_default) OVERRIDE;
virtual void OnWindowAllClosed() OVERRIDE;
virtual void OnQuit() OVERRIDE;
virtual void OnOpenFile(bool* prevent_default,
const std::string& file_path) OVERRIDE;
virtual void OnOpenURL(const std::string& url) OVERRIDE;
virtual void OnActivateWithNoOpenWindows() OVERRIDE;
virtual void OnWillFinishLaunching() OVERRIDE;
virtual void OnFinishLaunching() OVERRIDE;
// BrowserObserver:
void OnWillQuit(bool* prevent_default) override;
void OnWindowAllClosed() override;
void OnQuit() override;
void OnOpenFile(bool* prevent_default, const std::string& file_path) override;
void OnOpenURL(const std::string& url) override;
void OnActivateWithNoOpenWindows() override;
void OnWillFinishLaunching() override;
void OnFinishLaunching() override;
// mate::Wrappable implementations:
virtual mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate);
// mate::Wrappable:
mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate) override;
private:
base::FilePath GetDataPath();

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -69,14 +69,17 @@ void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
dict.SetMethod("startRecording", base::Bind(
&TracingController::EnableRecording, base::Unretained(controller)));
dict.SetMethod("stopRecording", base::Bind(
&TracingController::DisableRecording, base::Unretained(controller)));
&TracingController::DisableRecording,
base::Unretained(controller),
nullptr));
dict.SetMethod("startMonitoring", base::Bind(
&TracingController::EnableMonitoring, base::Unretained(controller)));
dict.SetMethod("stopMonitoring", base::Bind(
&TracingController::DisableMonitoring, base::Unretained(controller)));
dict.SetMethod("captureMonitoringSnapshot", base::Bind(
&TracingController::CaptureMonitoringSnapshot,
base::Unretained(controller)));
base::Unretained(controller),
nullptr));
dict.SetMethod("getTraceBufferPercentFull", base::Bind(
&TracingController::GetTraceBufferPercentFull,
base::Unretained(controller)));

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -103,6 +103,7 @@ void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
v8::Handle<v8::Context> context, void* priv) {
mate::Dictionary dict(context->GetIsolate(), exports);
dict.SetMethod("showMessageBox", &ShowMessageBox);
dict.SetMethod("showErrorBox", &atom::ShowErrorBox);
dict.SetMethod("showOpenDialog", &ShowOpenDialog);
dict.SetMethod("showSaveDialog", &ShowSaveDialog);
}

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -246,7 +246,8 @@ void Menu::BuildPrototype(v8::Isolate* isolate,
.SetMethod("isEnabledAt", &Menu::IsEnabledAt)
.SetMethod("isVisibleAt", &Menu::IsVisibleAt)
.SetMethod("attachToWindow", &Menu::AttachToWindow)
.SetMethod("_popup", &Menu::Popup);
.SetMethod("_popup", &Menu::Popup)
.SetMethod("_popupAt", &Menu::PopupAt);
}
} // namespace api

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -41,20 +41,21 @@ class Menu : public mate::Wrappable,
virtual ~Menu();
// ui::SimpleMenuModel::Delegate implementations:
virtual bool IsCommandIdChecked(int command_id) const OVERRIDE;
virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE;
virtual bool IsCommandIdVisible(int command_id) const OVERRIDE;
virtual bool GetAcceleratorForCommandId(
bool IsCommandIdChecked(int command_id) const override;
bool IsCommandIdEnabled(int command_id) const override;
bool IsCommandIdVisible(int command_id) const override;
bool GetAcceleratorForCommandId(
int command_id,
ui::Accelerator* accelerator) OVERRIDE;
virtual bool IsItemForCommandIdDynamic(int command_id) const OVERRIDE;
virtual base::string16 GetLabelForCommandId(int command_id) const OVERRIDE;
virtual base::string16 GetSublabelForCommandId(int command_id) const OVERRIDE;
virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE;
virtual void MenuWillShow(ui::SimpleMenuModel* source) OVERRIDE;
ui::Accelerator* accelerator) override;
bool IsItemForCommandIdDynamic(int command_id) const override;
base::string16 GetLabelForCommandId(int command_id) const override;
base::string16 GetSublabelForCommandId(int command_id) const override;
void ExecuteCommand(int command_id, int event_flags) override;
void MenuWillShow(ui::SimpleMenuModel* source) override;
virtual void AttachToWindow(Window* window);
virtual void Popup(Window* window) = 0;
virtual void PopupAt(Window* window, int x, int y) = 0;
scoped_ptr<ui::SimpleMenuModel> model_;
Menu* parent_;

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -20,6 +20,7 @@ class MenuMac : public Menu {
MenuMac();
virtual void Popup(Window* window) OVERRIDE;
virtual void PopupAt(Window* window, int x, int y) OVERRIDE;
base::scoped_nsobject<AtomMenuController> menu_controller_;

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -19,13 +19,17 @@ MenuMac::MenuMac() {
}
void MenuMac::Popup(Window* window) {
NativeWindow* native_window = window->window();
if (!native_window)
return;
content::WebContents* web_contents = native_window->GetWebContents();
if (!web_contents)
return;
NSWindow* nswindow = native_window->GetNativeWindow();
base::scoped_nsobject<AtomMenuController> menu_controller(
[[AtomMenuController alloc] initWithModel:model_.get()]);
NativeWindow* native_window = window->window();
NSWindow* nswindow = native_window->GetNativeWindow();
content::WebContents* web_contents = native_window->GetWebContents();
// Fake out a context menu event.
NSEvent* currentEvent = [NSApp currentEvent];
NSPoint position = [nswindow mouseLocationOutsideOfEventStream];
@@ -46,6 +50,25 @@ void MenuMac::Popup(Window* window) {
forView:web_contents->GetContentNativeView()];
}
void MenuMac::PopupAt(Window* window, int x, int y) {
NativeWindow* native_window = window->window();
if (!native_window)
return;
content::WebContents* web_contents = native_window->GetWebContents();
if (!web_contents)
return;
base::scoped_nsobject<AtomMenuController> menu_controller(
[[AtomMenuController alloc] initWithModel:model_.get()]);
NSMenu* menu = [menu_controller menu];
NSView* view = web_contents->GetContentNativeView();
// Show the menu.
[menu popUpMenuPositioningItem:[menu itemAtIndex:0]
atLocation:NSMakePoint(x, [view frame].size.height - y)
inView:view];
}
// static
void Menu::SetApplicationMenu(Menu* base_menu) {
MenuMac* menu = static_cast<MenuMac*>(base_menu);

View File

@@ -1,10 +1,11 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// 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/api/atom_api_menu_views.h"
#include "atom/browser/native_window_views.h"
#include "content/public/browser/render_widget_host_view.h"
#include "ui/gfx/screen.h"
#include "ui/views/controls/menu/menu_runner.h"
@@ -16,14 +17,32 @@ MenuViews::MenuViews() {
}
void MenuViews::Popup(Window* window) {
gfx::Point cursor = gfx::Screen::GetNativeScreen()->GetCursorScreenPoint();
PopupAtPoint(window, gfx::Screen::GetNativeScreen()->GetCursorScreenPoint());
}
void MenuViews::PopupAt(Window* window, int x, int y) {
NativeWindow* native_window = static_cast<NativeWindow*>(window->window());
if (!native_window)
return;
content::WebContents* web_contents = native_window->GetWebContents();
if (!web_contents)
return;
content::RenderWidgetHostView* view = web_contents->GetRenderWidgetHostView();
if (!view)
return;
gfx::Point origin = view->GetViewBounds().origin();
PopupAtPoint(window, gfx::Point(origin.x() + x, origin.y() + y));
}
void MenuViews::PopupAtPoint(Window* window, const gfx::Point& point) {
views::MenuRunner menu_runner(
model(),
views::MenuRunner::CONTEXT_MENU | views::MenuRunner::HAS_MNEMONICS);
ignore_result(menu_runner.RunMenuAt(
static_cast<NativeWindowViews*>(window->window())->widget(),
NULL,
gfx::Rect(cursor, gfx::Size()),
gfx::Rect(point, gfx::Size()),
views::MENU_ANCHOR_TOPLEFT,
ui::MENU_SOURCE_MOUSE));
}

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -6,6 +6,7 @@
#define ATOM_BROWSER_API_ATOM_API_MENU_VIEWS_H_
#include "atom/browser/api/atom_api_menu.h"
#include "ui/gfx/screen.h"
namespace atom {
@@ -17,8 +18,11 @@ class MenuViews : public Menu {
protected:
virtual void Popup(Window* window) OVERRIDE;
virtual void PopupAt(Window* window, int x, int y) OVERRIDE;
private:
void PopupAtPoint(Window* window, const gfx::Point& point);
DISALLOW_COPY_AND_ASSIGN(MenuViews);
};

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -9,6 +9,7 @@
#include "atom/browser/api/atom_api_menu.h"
#include "atom/browser/ui/tray_icon.h"
#include "atom/common/native_mate_converters/image_converter.h"
#include "atom/common/native_mate_converters/string16_converter.h"
#include "native_mate/constructor.h"
#include "native_mate/dictionary.h"
@@ -40,39 +41,95 @@ void Tray::OnDoubleClicked() {
Emit("double-clicked");
}
void Tray::SetImage(const gfx::ImageSkia& image) {
void Tray::OnBalloonShow() {
Emit("balloon-show");
}
void Tray::OnBalloonClicked() {
Emit("balloon-clicked");
}
void Tray::OnBalloonClosed() {
Emit("balloon-closed");
}
void Tray::Destroy() {
tray_icon_.reset();
}
void Tray::SetImage(mate::Arguments* args, const gfx::ImageSkia& image) {
if (!CheckTrayLife(args))
return;
tray_icon_->SetImage(image);
}
void Tray::SetPressedImage(const gfx::ImageSkia& image) {
void Tray::SetPressedImage(mate::Arguments* args, const gfx::ImageSkia& image) {
if (!CheckTrayLife(args))
return;
tray_icon_->SetPressedImage(image);
}
void Tray::SetToolTip(const std::string& tool_tip) {
void Tray::SetToolTip(mate::Arguments* args, const std::string& tool_tip) {
if (!CheckTrayLife(args))
return;
tray_icon_->SetToolTip(tool_tip);
}
void Tray::SetTitle(const std::string& title) {
void Tray::SetTitle(mate::Arguments* args, const std::string& title) {
if (!CheckTrayLife(args))
return;
tray_icon_->SetTitle(title);
}
void Tray::SetHighlightMode(bool highlight) {
void Tray::SetHighlightMode(mate::Arguments* args, bool highlight) {
if (!CheckTrayLife(args))
return;
tray_icon_->SetHighlightMode(highlight);
}
void Tray::SetContextMenu(Menu* menu) {
void Tray::DisplayBalloon(mate::Arguments* args,
const mate::Dictionary& options) {
if (!CheckTrayLife(args))
return;
gfx::ImageSkia icon;
options.Get("icon", &icon);
base::string16 title, content;
if (!options.Get("title", &title) ||
!options.Get("content", &content)) {
args->ThrowError("'title' and 'content' must be defined");
return;
}
tray_icon_->DisplayBalloon(icon, title, content);
}
void Tray::SetContextMenu(mate::Arguments* args, Menu* menu) {
if (!CheckTrayLife(args))
return;
tray_icon_->SetContextMenu(menu->model());
}
bool Tray::CheckTrayLife(mate::Arguments* args) {
if (!tray_icon_) {
args->ThrowError("Tray is already destroyed");
return false;
} else {
return true;
}
}
// static
void Tray::BuildPrototype(v8::Isolate* isolate,
v8::Handle<v8::ObjectTemplate> prototype) {
mate::ObjectTemplateBuilder(isolate, prototype)
.SetMethod("destroy", &Tray::Destroy)
.SetMethod("setImage", &Tray::SetImage)
.SetMethod("setPressedImage", &Tray::SetPressedImage)
.SetMethod("setToolTip", &Tray::SetToolTip)
.SetMethod("setTitle", &Tray::SetTitle)
.SetMethod("setHighlightMode", &Tray::SetHighlightMode)
.SetMethod("displayBalloon", &Tray::DisplayBalloon)
.SetMethod("_setContextMenu", &Tray::SetContextMenu);
}

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -15,6 +15,11 @@ namespace gfx {
class ImageSkia;
}
namespace mate {
class Arguments;
class Dictionary;
}
namespace atom {
class TrayIcon;
@@ -35,18 +40,25 @@ class Tray : public mate::EventEmitter,
explicit Tray(const gfx::ImageSkia& image);
virtual ~Tray();
// TrayIcon implementations:
virtual void OnClicked() OVERRIDE;
virtual void OnDoubleClicked() OVERRIDE;
// TrayIconObserver:
void OnClicked() override;
void OnDoubleClicked() override;
void OnBalloonShow() override;
void OnBalloonClicked() override;
void OnBalloonClosed() override;
void SetImage(const gfx::ImageSkia& image);
void SetPressedImage(const gfx::ImageSkia& image);
void SetToolTip(const std::string& tool_tip);
void SetTitle(const std::string& title);
void SetHighlightMode(bool highlight);
void SetContextMenu(Menu* menu);
void Destroy();
void SetImage(mate::Arguments* args, const gfx::ImageSkia& image);
void SetPressedImage(mate::Arguments* args, const gfx::ImageSkia& image);
void SetToolTip(mate::Arguments* args, const std::string& tool_tip);
void SetTitle(mate::Arguments* args, const std::string& title);
void SetHighlightMode(mate::Arguments* args, bool highlight);
void DisplayBalloon(mate::Arguments* args, const mate::Dictionary& options);
void SetContextMenu(mate::Arguments* args, Menu* menu);
private:
bool CheckTrayLife(mate::Arguments* args);
scoped_ptr<TrayIcon> tray_icon_;
DISALLOW_COPY_AND_ASSIGN(Tray);

View File

@@ -1,27 +1,142 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// 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/api/atom_api_web_contents.h"
#include "atom/browser/atom_browser_context.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/string16_converter.h"
#include "atom/common/native_mate_converters/value_converter.h"
#include "base/strings/utf_string_conversions.h"
#include "brightray/browser/inspectable_web_contents.h"
#include "content/public/browser/navigation_details.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/site_instance.h"
#include "content/public/browser/web_contents.h"
#include "native_mate/dictionary.h"
#include "native_mate/object_template_builder.h"
#include "atom/common/node_includes.h"
namespace atom {
namespace api {
namespace {
v8::Persistent<v8::ObjectTemplate> template_;
} // namespace
WebContents::WebContents(content::WebContents* web_contents)
: content::WebContentsObserver(web_contents),
web_contents_(web_contents) {
guest_instance_id_(-1),
element_instance_id_(-1),
guest_opaque_(true),
auto_size_enabled_(false) {
}
WebContents::WebContents(const mate::Dictionary& options)
: guest_instance_id_(-1),
element_instance_id_(-1),
guest_opaque_(true),
auto_size_enabled_(false) {
options.Get("guestInstanceId", &guest_instance_id_);
auto browser_context = AtomBrowserContext::Get();
content::SiteInstance* site_instance = content::SiteInstance::CreateForURL(
browser_context, GURL("chrome-guest://fake-host"));
content::WebContents::CreateParams params(browser_context, site_instance);
bool is_guest;
if (options.Get("isGuest", &is_guest) && is_guest)
params.guest_delegate = this;
storage_.reset(brightray::InspectableWebContents::Create(params));
Observe(storage_->GetWebContents());
web_contents()->SetDelegate(this);
}
WebContents::~WebContents() {
Destroy();
}
bool WebContents::AddMessageToConsole(content::WebContents* source,
int32 level,
const base::string16& message,
int32 line_no,
const base::string16& source_id) {
base::ListValue args;
args.AppendInteger(level);
args.AppendString(message);
args.AppendInteger(line_no);
args.AppendString(source_id);
Emit("console-message", args);
return true;
}
bool WebContents::ShouldCreateWebContents(
content::WebContents* web_contents,
int route_id,
WindowContainerType window_container_type,
const base::string16& frame_name,
const GURL& target_url,
const std::string& partition_id,
content::SessionStorageNamespace* session_storage_namespace) {
base::ListValue args;
args.AppendString(target_url.spec());
args.AppendString(frame_name);
args.AppendInteger(NEW_FOREGROUND_TAB);
Emit("-new-window", args);
return false;
}
void WebContents::CloseContents(content::WebContents* source) {
Emit("close");
}
content::WebContents* WebContents::OpenURLFromTab(
content::WebContents* source,
const content::OpenURLParams& params) {
if (params.disposition != CURRENT_TAB) {
base::ListValue args;
args.AppendString(params.url.spec());
args.AppendString("");
args.AppendInteger(params.disposition);
Emit("-new-window", args);
return NULL;
}
content::NavigationController::LoadURLParams load_url_params(params.url);
load_url_params.referrer = params.referrer;
load_url_params.transition_type = params.transition;
load_url_params.extra_headers = params.extra_headers;
load_url_params.should_replace_current_entry =
params.should_replace_current_entry;
load_url_params.is_renderer_initiated = params.is_renderer_initiated;
load_url_params.transferred_global_request_id =
params.transferred_global_request_id;
web_contents()->GetController().LoadURLWithParams(load_url_params);
return web_contents();
}
void WebContents::HandleKeyboardEvent(
content::WebContents* source,
const content::NativeWebKeyboardEvent& event) {
if (!attached())
return;
// Send the unhandled keyboard events back to the embedder to reprocess them.
embedder_web_contents_->GetDelegate()->HandleKeyboardEvent(
web_contents(), event);
}
void WebContents::RenderViewDeleted(content::RenderViewHost* render_view_host) {
@@ -47,6 +162,16 @@ void WebContents::DidFinishLoad(content::RenderFrameHost* render_frame_host,
Emit("did-finish-load");
}
void WebContents::DidFailLoad(content::RenderFrameHost* render_frame_host,
const GURL& validated_url,
int error_code,
const base::string16& error_description) {
base::ListValue args;
args.AppendInteger(error_code);
args.AppendString(error_description);
Emit("did-fail-load", args);
}
void WebContents::DidStartLoading(content::RenderViewHost* render_view_host) {
Emit("did-start-loading");
}
@@ -55,6 +180,24 @@ void WebContents::DidStopLoading(content::RenderViewHost* render_view_host) {
Emit("did-stop-loading");
}
void WebContents::DidGetRedirectForResourceRequest(
content::RenderViewHost* render_view_host,
const content::ResourceRedirectDetails& details) {
base::ListValue args;
args.AppendString(details.url.spec());
args.AppendString(details.new_url.spec());
args.AppendBoolean(
details.resource_type == content::RESOURCE_TYPE_MAIN_FRAME);
Emit("did-get-redirect-request", args);
}
void WebContents::DidNavigateMainFrame(
const content::LoadCommittedDetails& details,
const content::FrameNavigateParams& params) {
if (details.is_navigation_to_different_page())
Emit("did-navigate-to-different-page");
}
bool WebContents::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(WebContents, message)
@@ -67,19 +210,82 @@ bool WebContents::OnMessageReceived(const IPC::Message& message) {
return handled;
}
void WebContents::RenderViewReady() {
if (!is_guest())
return;
// We don't want to accidentally set the opacity of an interstitial page.
// WebContents::GetRenderWidgetHostView will return the RWHV of an
// interstitial page if one is showing at this time. We only want opacity
// to apply to web pages.
web_contents()->GetRenderViewHost()->GetView()->
SetBackgroundOpaque(guest_opaque_);
content::RenderViewHost* rvh = web_contents()->GetRenderViewHost();
if (auto_size_enabled_) {
rvh->EnableAutoResize(min_auto_size_, max_auto_size_);
} else {
rvh->DisableAutoResize(element_size_);
}
}
void WebContents::WebContentsDestroyed() {
// The RenderViewDeleted was not called when the WebContents is destroyed.
RenderViewDeleted(web_contents_->GetRenderViewHost());
RenderViewDeleted(web_contents()->GetRenderViewHost());
Emit("destroyed");
}
void WebContents::DidAttach(int guest_proxy_routing_id) {
Emit("did-attach");
}
void WebContents::ElementSizeChanged(const gfx::Size& old_size,
const gfx::Size& new_size) {
element_size_ = new_size;
}
void WebContents::GuestSizeChanged(const gfx::Size& old_size,
const gfx::Size& new_size) {
if (!auto_size_enabled_)
return;
guest_size_ = new_size;
GuestSizeChangedDueToAutoSize(old_size, new_size);
}
void WebContents::RegisterDestructionCallback(
const DestructionCallback& callback) {
destruction_callback_ = callback;
}
void WebContents::WillAttach(content::WebContents* embedder_web_contents,
int browser_plugin_instance_id) {
embedder_web_contents_ = embedder_web_contents;
element_instance_id_ = browser_plugin_instance_id;
}
void WebContents::Destroy() {
if (storage_) {
if (!destruction_callback_.is_null())
destruction_callback_.Run();
Observe(nullptr);
storage_.reset();
}
}
bool WebContents::IsAlive() const {
return web_contents() != NULL;
}
void WebContents::LoadURL(const GURL& url) {
void WebContents::LoadURL(const GURL& url, const mate::Dictionary& options) {
content::NavigationController::LoadURLParams params(url);
params.transition_type = content::PAGE_TRANSITION_TYPED;
GURL http_referrer;
if (options.Get("httpreferrer", &http_referrer))
params.referrer = content::Referrer(http_referrer.GetAsReferrer(),
blink::WebReferrerPolicyDefault);
params.transition_type = ui::PAGE_TRANSITION_TYPED;
params.override_user_agent = content::NavigationController::UA_OVERRIDE_TRUE;
web_contents()->GetController().LoadURLWithParams(params);
}
@@ -104,15 +310,15 @@ void WebContents::Stop() {
web_contents()->Stop();
}
void WebContents::Reload() {
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());
LoadURL(GetURL(), options);
}
void WebContents::ReloadIgnoringCache() {
Reload();
void WebContents::ReloadIgnoringCache(const mate::Dictionary& options) {
Reload(options);
}
bool WebContents::CanGoBack() const {
@@ -155,45 +361,118 @@ bool WebContents::IsCrashed() const {
return web_contents()->IsCrashed();
}
void WebContents::SetUserAgent(const std::string& user_agent) {
web_contents()->SetUserAgentOverride(user_agent);
}
void WebContents::InsertCSS(const std::string& css) {
web_contents()->InsertCSS(css);
}
void WebContents::ExecuteJavaScript(const base::string16& code) {
web_contents()->GetMainFrame()->ExecuteJavaScript(code);
}
void WebContents::OpenDevTools() {
storage_->SetCanDock(false);
storage_->ShowDevTools();
}
void WebContents::CloseDevTools() {
storage_->CloseDevTools();
}
bool WebContents::IsDevToolsOpened() {
return storage_->IsDevToolsViewShowing();
}
bool WebContents::SendIPCMessage(const base::string16& channel,
const base::ListValue& args) {
return Send(new AtomViewMsg_Message(routing_id(), channel, args));
}
void WebContents::SetAutoSize(bool enabled,
const gfx::Size& min_size,
const gfx::Size& max_size) {
min_auto_size_ = min_size;
min_auto_size_.SetToMin(max_size);
max_auto_size_ = max_size;
max_auto_size_.SetToMax(min_size);
enabled &= !min_auto_size_.IsEmpty() && !max_auto_size_.IsEmpty();
if (!enabled && !auto_size_enabled_)
return;
auto_size_enabled_ = enabled;
if (!attached())
return;
content::RenderViewHost* rvh = web_contents()->GetRenderViewHost();
if (auto_size_enabled_) {
rvh->EnableAutoResize(min_auto_size_, max_auto_size_);
} else {
rvh->DisableAutoResize(element_size_);
guest_size_ = element_size_;
GuestSizeChangedDueToAutoSize(guest_size_, element_size_);
}
}
void WebContents::SetAllowTransparency(bool allow) {
if (guest_opaque_ != allow)
return;
guest_opaque_ = !allow;
if (!web_contents()->GetRenderViewHost()->GetView())
return;
web_contents()->GetRenderViewHost()->GetView()->SetBackgroundOpaque(!allow);
}
mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
return mate::ObjectTemplateBuilder(isolate)
.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("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("getRoutingId", &WebContents::GetRoutingID)
.SetMethod("getProcessId", &WebContents::GetProcessID)
.SetMethod("isCrashed", &WebContents::IsCrashed)
.SetMethod("_executeJavaScript", &WebContents::ExecuteJavaScript)
.SetMethod("_send", &WebContents::SendIPCMessage);
if (template_.IsEmpty())
template_.Reset(isolate, mate::ObjectTemplateBuilder(isolate)
.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("_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("getRoutingId", &WebContents::GetRoutingID)
.SetMethod("getProcessId", &WebContents::GetProcessID)
.SetMethod("isCrashed", &WebContents::IsCrashed)
.SetMethod("setUserAgent", &WebContents::SetUserAgent)
.SetMethod("insertCSS", &WebContents::InsertCSS)
.SetMethod("_executeJavaScript", &WebContents::ExecuteJavaScript)
.SetMethod("_send", &WebContents::SendIPCMessage)
.SetMethod("setAutoSize", &WebContents::SetAutoSize)
.SetMethod("setAllowTransparency", &WebContents::SetAllowTransparency)
.SetMethod("isGuest", &WebContents::is_guest)
.SetMethod("openDevTools", &WebContents::OpenDevTools)
.SetMethod("closeDevTools", &WebContents::CloseDevTools)
.SetMethod("isDevToolsOpened", &WebContents::IsDevToolsOpened)
.Build());
return mate::ObjectTemplateBuilder(
isolate, v8::Local<v8::ObjectTemplate>::New(isolate, template_));
}
void WebContents::OnRendererMessage(const base::string16& channel,
const base::ListValue& args) {
// webContents.emit(channel, new Event(), args...);
Emit(base::UTF16ToUTF8(channel), args, web_contents(), NULL);
Emit(base::UTF16ToUTF8(channel), args);
}
void WebContents::OnRendererMessageSync(const base::string16& channel,
@@ -203,12 +482,42 @@ void WebContents::OnRendererMessageSync(const base::string16& channel,
Emit(base::UTF16ToUTF8(channel), args, web_contents(), message);
}
void WebContents::GuestSizeChangedDueToAutoSize(const gfx::Size& old_size,
const gfx::Size& new_size) {
base::ListValue args;
args.AppendInteger(old_size.width());
args.AppendInteger(old_size.height());
args.AppendInteger(new_size.width());
args.AppendInteger(new_size.height());
Emit("size-changed", args);
}
// static
mate::Handle<WebContents> WebContents::Create(
mate::Handle<WebContents> WebContents::CreateFrom(
v8::Isolate* isolate, content::WebContents* web_contents) {
return mate::CreateHandle(isolate, new WebContents(web_contents));
}
// static
mate::Handle<WebContents> WebContents::Create(
v8::Isolate* isolate, const mate::Dictionary& options) {
return mate::CreateHandle(isolate, new WebContents(options));
}
} // namespace api
} // namespace atom
namespace {
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
v8::Handle<v8::Context> context, void* priv) {
v8::Isolate* isolate = context->GetIsolate();
mate::Dictionary dict(isolate, exports);
dict.SetMethod("create", &atom::api::WebContents::Create);
}
} // namespace
NODE_MODULE_CONTEXT_AWARE_BUILTIN(atom_browser_web_contents, Initialize)

View File

@@ -1,33 +1,54 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// 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_API_ATOM_API_WEB_CONTENTS_H_
#define ATOM_BROWSER_API_ATOM_API_WEB_CONTENTS_H_
#include <string>
#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/browser/web_contents_delegate.h"
#include "content/public/browser/web_contents_observer.h"
#include "native_mate/handle.h"
namespace brightray {
class InspectableWebContents;
}
namespace mate {
class Dictionary;
}
namespace atom {
namespace api {
class WebContents : public mate::EventEmitter,
public content::BrowserPluginGuestDelegate,
public content::WebContentsDelegate,
public content::WebContentsObserver {
public:
static mate::Handle<WebContents> Create(v8::Isolate* isolate,
content::WebContents* web_contents);
// Create from an existing WebContents.
static mate::Handle<WebContents> CreateFrom(
v8::Isolate* isolate, content::WebContents* web_contents);
// Create a new WebContents.
static mate::Handle<WebContents> Create(
v8::Isolate* isolate, const mate::Dictionary& options);
void Destroy();
bool IsAlive() const;
void LoadURL(const GURL& url);
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();
void ReloadIgnoringCache();
void Reload(const mate::Dictionary& options);
void ReloadIgnoringCache(const mate::Dictionary& options);
bool CanGoBack() const;
bool CanGoForward() const;
bool CanGoToOffset(int offset) const;
@@ -38,28 +59,94 @@ class WebContents : public mate::EventEmitter,
int GetRoutingID() const;
int GetProcessID() const;
bool IsCrashed() const;
void SetUserAgent(const std::string& user_agent);
void InsertCSS(const std::string& css);
void ExecuteJavaScript(const base::string16& code);
void OpenDevTools();
void CloseDevTools();
bool IsDevToolsOpened();
bool SendIPCMessage(const base::string16& channel,
const base::ListValue& args);
// Toggles autosize mode for corresponding <webview>.
void SetAutoSize(bool enabled,
const gfx::Size& min_size,
const gfx::Size& max_size);
// Sets the transparency of the guest.
void SetAllowTransparency(bool allow);
// Returns whether this is a guest view.
bool is_guest() const { return guest_instance_id_ != -1; }
// Returns whether this guest has an associated embedder.
bool attached() const { return !!embedder_web_contents_; }
content::WebContents* web_contents() const {
return content::WebContentsObserver::web_contents();
}
protected:
explicit WebContents(content::WebContents* web_contents);
explicit WebContents(const mate::Dictionary& options);
~WebContents();
// mate::Wrappable implementations:
// mate::Wrappable:
virtual mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate) OVERRIDE;
v8::Isolate* isolate) override;
// content::WebContentsObserver implementations:
virtual void RenderViewDeleted(content::RenderViewHost*) OVERRIDE;
virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE;
virtual void DidFinishLoad(content::RenderFrameHost* render_frame_host,
const GURL& validated_url) OVERRIDE;
virtual void DidStartLoading(
content::RenderViewHost* render_view_host) OVERRIDE;
virtual void DidStopLoading(
content::RenderViewHost* render_view_host) OVERRIDE;
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
virtual void WebContentsDestroyed() OVERRIDE;
// content::WebContentsDelegate:
bool AddMessageToConsole(content::WebContents* source,
int32 level,
const base::string16& message,
int32 line_no,
const base::string16& source_id) override;
bool ShouldCreateWebContents(
content::WebContents* web_contents,
int route_id,
WindowContainerType window_container_type,
const base::string16& frame_name,
const GURL& target_url,
const std::string& partition_id,
content::SessionStorageNamespace* session_storage_namespace) override;
void CloseContents(content::WebContents* source) override;
content::WebContents* OpenURLFromTab(
content::WebContents* source,
const content::OpenURLParams& params) override;
void HandleKeyboardEvent(
content::WebContents* source,
const content::NativeWebKeyboardEvent& event) override;
// content::WebContentsObserver:
void RenderViewDeleted(content::RenderViewHost*) override;
void RenderProcessGone(base::TerminationStatus status) override;
void DidFinishLoad(content::RenderFrameHost* render_frame_host,
const GURL& validated_url) override;
void DidFailLoad(content::RenderFrameHost* render_frame_host,
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 DidGetRedirectForResourceRequest(
content::RenderViewHost* render_view_host,
const content::ResourceRedirectDetails& details) override;
void DidNavigateMainFrame(
const content::LoadCommittedDetails& details,
const content::FrameNavigateParams& params) override;
bool OnMessageReceived(const IPC::Message& message) override;
void RenderViewReady() override;
void WebContentsDestroyed() override;
// content::BrowserPluginGuestDelegate:
void DidAttach(int guest_proxy_routing_id) final;
void ElementSizeChanged(const gfx::Size& old_size,
const gfx::Size& new_size) final;
void GuestSizeChanged(const gfx::Size& old_size,
const gfx::Size& new_size) final;
void RegisterDestructionCallback(const DestructionCallback& callback) final;
void WillAttach(content::WebContents* embedder_web_contents,
int browser_plugin_instance_id) final;
private:
// Called when received a message from renderer.
@@ -71,7 +158,42 @@ class WebContents : public mate::EventEmitter,
const base::ListValue& args,
IPC::Message* message);
content::WebContents* web_contents_; // Weak.
void GuestSizeChangedDueToAutoSize(const gfx::Size& old_size,
const gfx::Size& new_size);
// Unique ID for a guest WebContents.
int guest_instance_id_;
// |element_instance_id_| is an identifer that's unique to a particular
// element.
int element_instance_id_;
DestructionCallback destruction_callback_;
// Stores whether the contents of the guest can be transparent.
bool guest_opaque_;
// Stores the WebContents that managed by this class.
scoped_ptr<brightray::InspectableWebContents> storage_;
// The WebContents that attaches this guest view.
content::WebContents* embedder_web_contents_;
// The size of the container element.
gfx::Size element_size_;
// The size of the guest content. Note: In autosize mode, the container
// element may not match the size of the guest.
gfx::Size guest_size_;
// Indicates whether autosize mode is enabled or not.
bool auto_size_enabled_;
// The maximum size constraints of the container element in autosize mode.
gfx::Size max_auto_size_;
// The minimum size constraints of the container element in autosize mode.
gfx::Size min_auto_size_;
DISALLOW_COPY_AND_ASSIGN(WebContents);
};

View File

@@ -1,18 +1,17 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "atom/browser/api/atom_api_window.h"
#include "atom/browser/api/atom_api_web_contents.h"
#include "atom/browser/browser.h"
#include "atom/browser/native_window.h"
#include "atom/common/native_mate_converters/gfx_converter.h"
#include "content/public/browser/render_process_host.h"
#include "native_mate/callback.h"
#include "native_mate/constructor.h"
#include "native_mate/dictionary.h"
#include "ui/gfx/point.h"
#include "ui/gfx/rect.h"
#include "ui/gfx/size.h"
#include "atom/common/node_includes.h"
@@ -20,7 +19,7 @@ namespace {
struct PrintSettings {
bool silent;
bool print_backgournd;
bool print_background;
};
} // namespace
@@ -35,24 +34,7 @@ struct Converter<PrintSettings> {
if (!ConvertFromV8(isolate, val, &dict))
return false;
dict.Get("silent", &(out->silent));
dict.Get("printBackground", &(out->print_backgournd));
return true;
}
};
template<>
struct Converter<gfx::Rect> {
static bool FromV8(v8::Isolate* isolate,
v8::Handle<v8::Value> val,
gfx::Rect* out) {
if (!val->IsObject())
return false;
mate::Dictionary dict(isolate, val->ToObject());
int x, y, width, height;
if (!dict.Get("x", &x) || !dict.Get("y", &y) ||
!dict.Get("width", &width) || !dict.Get("height", &height))
return false;
*out = gfx::Rect(x, y, width, height);
dict.Get("printBackground", &(out->print_background));
return true;
}
};
@@ -90,8 +72,6 @@ Window::Window(const mate::Dictionary& options)
Window::~Window() {
if (window_)
Destroy();
Emit("destroyed");
}
void Window::OnPageTitleUpdated(bool* prevent_default,
@@ -101,6 +81,17 @@ void Window::OnPageTitleUpdated(bool* prevent_default,
*prevent_default = Emit("page-title-updated", args);
}
void Window::WillCreatePopupWindow(const base::string16& frame_name,
const GURL& target_url,
const std::string& partition_id,
WindowOpenDisposition disposition) {
base::ListValue args;
args.AppendString(target_url.spec());
args.AppendString(frame_name);
args.AppendInteger(disposition);
Emit("-new-window", args);
}
void Window::WillCloseWindow(bool* prevent_default) {
*prevent_default = Emit("close");
}
@@ -119,6 +110,30 @@ void Window::OnWindowFocus() {
Emit("focus");
}
void Window::OnWindowMaximize() {
Emit("maximize");
}
void Window::OnWindowUnmaximize() {
Emit("unmaximize");
}
void Window::OnWindowMinimize() {
Emit("minimize");
}
void Window::OnWindowRestore() {
Emit("restore");
}
void Window::OnWindowEnterFullScreen() {
Emit("enter-full-screen");
}
void Window::OnWindowLeaveFullScreen() {
Emit("leave-full-screen");
}
void Window::OnRendererUnresponsive() {
Emit("unresponsive");
}
@@ -128,8 +143,15 @@ void Window::OnRendererResponsive() {
}
// static
mate::Wrappable* Window::New(const mate::Dictionary& options) {
return new Window(options);
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")));
return nullptr;
}
}
void Window::Destroy() {
@@ -141,6 +163,10 @@ void Window::Close() {
window_->Close();
}
bool Window::IsClosed() {
return window_->IsClosed();
}
void Window::Focus() {
window_->Focus(true);
}
@@ -189,8 +215,8 @@ bool Window::IsMinimized() {
return window_->IsMinimized();
}
void Window::SetFullscreen(bool fullscreen) {
window_->SetFullscreen(fullscreen);
void Window::SetFullScreen(bool fullscreen) {
window_->SetFullScreen(fullscreen);
}
bool Window::IsFullscreen() {
@@ -367,20 +393,36 @@ void Window::Print(mate::Arguments* args) {
return;
}
window_->Print(settings.silent, settings.print_backgournd);
window_->Print(settings.silent, settings.print_background);
}
void Window::SetProgressBar(double progress) {
window_->SetProgressBar(progress);
}
void Window::SetAutoHideMenuBar(bool auto_hide) {
window_->SetAutoHideMenuBar(auto_hide);
}
bool Window::IsMenuBarAutoHide() {
return window_->IsMenuBarAutoHide();
}
void Window::SetMenuBarVisibility(bool visible) {
window_->SetMenuBarVisibility(visible);
}
bool Window::IsMenuBarVisible() {
return window_->IsMenuBarVisible();
}
mate::Handle<WebContents> Window::GetWebContents(v8::Isolate* isolate) const {
return WebContents::Create(isolate, window_->GetWebContents());
return WebContents::CreateFrom(isolate, window_->GetWebContents());
}
mate::Handle<WebContents> Window::GetDevToolsWebContents(
v8::Isolate* isolate) const {
return WebContents::Create(isolate, window_->GetDevToolsWebContents());
return WebContents::CreateFrom(isolate, window_->GetDevToolsWebContents());
}
// static
@@ -389,6 +431,7 @@ void Window::BuildPrototype(v8::Isolate* isolate,
mate::ObjectTemplateBuilder(isolate, prototype)
.SetMethod("destroy", &Window::Destroy)
.SetMethod("close", &Window::Close)
.SetMethod("isClosed", &Window::IsClosed)
.SetMethod("focus", &Window::Focus)
.SetMethod("isFocused", &Window::IsFocused)
.SetMethod("show", &Window::Show)
@@ -401,7 +444,7 @@ void Window::BuildPrototype(v8::Isolate* isolate,
.SetMethod("minimize", &Window::Minimize)
.SetMethod("restore", &Window::Restore)
.SetMethod("isMinimized", &Window::IsMinimized)
.SetMethod("setFullScreen", &Window::SetFullscreen)
.SetMethod("setFullScreen", &Window::SetFullScreen)
.SetMethod("isFullScreen", &Window::IsFullscreen)
.SetMethod("getSize", &Window::GetSize)
.SetMethod("setSize", &Window::SetSize)
@@ -438,6 +481,10 @@ void Window::BuildPrototype(v8::Isolate* isolate,
.SetMethod("capturePage", &Window::CapturePage)
.SetMethod("print", &Window::Print)
.SetMethod("setProgressBar", &Window::SetProgressBar)
.SetMethod("setAutoHideMenuBar", &Window::SetAutoHideMenuBar)
.SetMethod("isMenuBarAutoHide", &Window::IsMenuBarAutoHide)
.SetMethod("setMenuBarVisibility", &Window::SetMenuBarVisibility)
.SetMethod("isMenuBarVisible", &Window::IsMenuBarVisible)
.SetMethod("_getWebContents", &Window::GetWebContents)
.SetMethod("_getDevToolsWebContents", &Window::GetDevToolsWebContents);
}

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -31,7 +31,8 @@ class WebContents;
class Window : public mate::EventEmitter,
public NativeWindowObserver {
public:
static mate::Wrappable* New(const mate::Dictionary& options);
static mate::Wrappable* New(v8::Isolate* isolate,
const mate::Dictionary& options);
static void BuildPrototype(v8::Isolate* isolate,
v8::Handle<v8::ObjectTemplate> prototype);
@@ -42,20 +43,31 @@ class Window : public mate::EventEmitter,
explicit Window(const mate::Dictionary& options);
virtual ~Window();
// Implementations of NativeWindowObserver:
virtual void OnPageTitleUpdated(bool* prevent_default,
const std::string& title) OVERRIDE;
virtual void WillCloseWindow(bool* prevent_default) OVERRIDE;
virtual void OnWindowClosed() OVERRIDE;
virtual void OnWindowBlur() OVERRIDE;
virtual void OnWindowFocus() OVERRIDE;
virtual void OnRendererUnresponsive() OVERRIDE;
virtual void OnRendererResponsive() OVERRIDE;
// NativeWindowObserver:
void OnPageTitleUpdated(bool* prevent_default,
const std::string& title) override;
void WillCreatePopupWindow(const base::string16& frame_name,
const GURL& target_url,
const std::string& partition_id,
WindowOpenDisposition disposition) override;
void WillCloseWindow(bool* prevent_default) override;
void OnWindowClosed() override;
void OnWindowBlur() override;
void OnWindowFocus() override;
void OnWindowMaximize() override;
void OnWindowUnmaximize() override;
void OnWindowMinimize() override;
void OnWindowRestore() override;
void OnWindowEnterFullScreen() override;
void OnWindowLeaveFullScreen() override;
void OnRendererUnresponsive() override;
void OnRendererResponsive() override;
private:
// APIs for NativeWindow.
void Destroy();
void Close();
bool IsClosed();
void Focus();
bool IsFocused();
void Show();
@@ -68,7 +80,7 @@ class Window : public mate::EventEmitter,
void Minimize();
void Restore();
bool IsMinimized();
void SetFullscreen(bool fullscreen);
void SetFullScreen(bool fullscreen);
bool IsFullscreen();
void SetSize(int width, int height);
std::vector<int> GetSize();
@@ -105,6 +117,10 @@ class Window : public mate::EventEmitter,
void CapturePage(mate::Arguments* args);
void Print(mate::Arguments* args);
void SetProgressBar(double progress);
void SetAutoHideMenuBar(bool auto_hide);
bool IsMenuBarAutoHide();
void SetMenuBarVisibility(bool visible);
bool IsMenuBarVisible();
// APIs for WebContents.
mate::Handle<WebContents> GetWebContents(v8::Isolate* isolate) const;

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -19,8 +19,7 @@ v8::Persistent<v8::ObjectTemplate> template_;
Event::Event()
: sender_(NULL),
message_(NULL),
prevent_default_(false) {
message_(NULL) {
}
Event::~Event() {
@@ -52,8 +51,9 @@ void Event::WebContentsDestroyed() {
message_ = NULL;
}
void Event::PreventDefault() {
prevent_default_ = true;
void Event::PreventDefault(v8::Isolate* isolate) {
GetWrapper(isolate)->Set(StringToV8(isolate, "defaultPrevented"),
v8::True(isolate));
}
bool Event::SendReply(const base::string16& json) {

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -24,14 +24,11 @@ class Event : public Wrappable,
void SetSenderAndMessage(content::WebContents* sender, IPC::Message* message);
// event.PreventDefault().
void PreventDefault();
void PreventDefault(v8::Isolate* isolate);
// event.sendReply(json), used for replying synchronous message.
bool SendReply(const base::string16& json);
// Whether event.preventDefault() is called.
bool prevent_default() const { return prevent_default_; }
protected:
Event();
virtual ~Event();
@@ -47,8 +44,6 @@ class Event : public Wrappable,
content::WebContents* sender_;
IPC::Message* message_;
bool prevent_default_;
DISALLOW_COPY_AND_ASSIGN(Event);
};

View File

@@ -1,11 +1,9 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// 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/api/event_emitter.h"
#include <vector>
#include "atom/browser/api/event.h"
#include "atom/common/native_mate_converters/v8_value_converter.h"
#include "base/memory/scoped_ptr.h"
@@ -22,9 +20,8 @@ namespace {
v8::Persistent<v8::ObjectTemplate> event_template;
void PreventDefault(mate::Arguments* args) {
args->GetThis()->SetHiddenValue(
StringToV8(args->isolate(), "prevent_default"),
v8::True(args->isolate()));
args->GetThis()->Set(StringToV8(args->isolate(), "defaultPrevented"),
v8::True(args->isolate()));
}
// Create a pure JavaScript Event object.
@@ -64,6 +61,23 @@ bool EventEmitter::Emit(const base::StringPiece& name,
v8::Handle<v8::Context> context = isolate->GetCurrentContext();
scoped_ptr<atom::V8ValueConverter> converter(new atom::V8ValueConverter);
// v8_args = [args...];
Arguments v8_args;
v8_args.reserve(args.GetSize());
for (size_t i = 0; i < args.GetSize(); i++) {
const base::Value* value(NULL);
if (args.Get(i, &value))
v8_args.push_back(converter->ToV8Value(value, context));
}
return Emit(isolate, name, v8_args, sender, message);
}
bool EventEmitter::Emit(v8::Isolate* isolate,
const base::StringPiece& name,
Arguments args,
content::WebContents* sender,
IPC::Message* message) {
v8::Handle<v8::Object> event;
bool use_native_event = sender && message;
@@ -75,32 +89,15 @@ bool EventEmitter::Emit(const base::StringPiece& name,
event = CreateEventObject(isolate);
}
// v8_args = [name, event, args...];
std::vector<v8::Handle<v8::Value>> v8_args;
v8_args.reserve(args.GetSize() + 2);
v8_args.push_back(mate::StringToV8(isolate, name));
v8_args.push_back(event);
for (size_t i = 0; i < args.GetSize(); i++) {
const base::Value* value(NULL);
if (args.Get(i, &value))
v8_args.push_back(converter->ToV8Value(value, context));
}
// args = [name, event, args...];
args.insert(args.begin(), event);
args.insert(args.begin(), mate::StringToV8(isolate, name));
// this.emit.apply(this, v8_args);
node::MakeCallback(isolate, GetWrapper(isolate), "emit", v8_args.size(),
&v8_args[0]);
// this.emit.apply(this, args);
node::MakeCallback(isolate, GetWrapper(isolate), "emit", args.size(),
&args[0]);
if (use_native_event) {
Handle<Event> native_event;
if (ConvertFromV8(isolate, event, &native_event))
return native_event->prevent_default();
}
v8::Handle<v8::Value> prevent_default =
event->GetHiddenValue(StringToSymbol(isolate, "prevent_default"));
if (prevent_default.IsEmpty())
return false;
return prevent_default->BooleanValue();
return event->Get(StringToV8(isolate, "defaultPrevented"))->BooleanValue();
}
} // namespace mate

View File

@@ -1,10 +1,12 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// 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_API_EVENT_EMITTER_H_
#define ATOM_BROWSER_API_EVENT_EMITTER_H_
#include <vector>
#include "native_mate/wrappable.h"
namespace base {
@@ -23,6 +25,9 @@ namespace mate {
// Provide helperers to emit event in JavaScript.
class EventEmitter : public Wrappable {
public:
typedef std::vector<v8::Handle<v8::Value>> Arguments;
protected:
EventEmitter();
@@ -36,6 +41,13 @@ class EventEmitter : public Wrappable {
bool Emit(const base::StringPiece& name, const base::ListValue& args,
content::WebContents* sender, IPC::Message* message);
// Lower level implementations.
bool Emit(v8::Isolate* isolate,
const base::StringPiece& name,
Arguments args,
content::WebContents* sender = nullptr,
IPC::Message* message = nullptr);
private:
DISALLOW_COPY_AND_ASSIGN(EventEmitter);
};

View File

@@ -26,6 +26,7 @@ if process.platform is 'darwin'
getBadge: bindings.dockGetBadgeText
hide: bindings.dockHide
show: bindings.dockShow
setMenu: bindings.dockSetMenu
# Be compatible with old API.
app.once 'ready', -> app.emit 'finish-launching'

View File

@@ -1,6 +1,7 @@
EventEmitter = require('events').EventEmitter
IDWeakMap = require 'id-weak-map'
app = require 'app'
ipc = require 'ipc'
wrapWebContents = require('web-contents').wrap
BrowserWindow = process.atomBinding('window').BrowserWindow
@@ -23,6 +24,12 @@ BrowserWindow::_init = ->
value: BrowserWindow.windows.add(this)
enumerable: true
# Make new windows requested by links behave like "window.open"
@on '-new-window', (event, url, frameName) =>
event.sender = @webContents
options = show: true, width: 800, height: 600
ipc.emit 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_OPEN', event, url, frameName, options
# Remove the window from weak map immediately when it's destroyed, since we
# could be iterating windows before GC happened.
@once 'closed', =>
@@ -83,8 +90,8 @@ BrowserWindow::send = -> @webContents.send.apply @webContents, arguments
# Be compatible with old API.
BrowserWindow::restart = -> @webContents.reload()
BrowserWindow::getUrl = -> @webContents.getUrl()
BrowserWindow::reload = -> @webContents.reload()
BrowserWindow::reloadIgnoringCache = -> @webContents.reloadIgnoringCache()
BrowserWindow::reload = -> @webContents.reload.apply @webContents, arguments
BrowserWindow::reloadIgnoringCache = -> @webContents.reloadIgnoringCache.apply @webContents, arguments
BrowserWindow::getPageTitle = -> @webContents.getTitle()
BrowserWindow::isLoading = -> @webContents.isLoading()
BrowserWindow::isWaitingForResponse = -> @webContents.isWaitingForResponse()

View File

@@ -1,5 +1,6 @@
binding = process.atomBinding 'dialog'
v8Util = process.atomBinding 'v8_util'
app = require 'app'
BrowserWindow = require 'browser-window'
fileDialogProperties =
@@ -22,8 +23,12 @@ parseArgs = (window, options, callback) ->
options = null
[window, options, callback]
checkAppInitialized = ->
throw new Error('dialog module can only be used after app is ready') unless app.isReady()
module.exports =
showOpenDialog: (args...) ->
checkAppInitialized()
[window, options, callback] = parseArgs args...
options ?= title: 'Open', properties: ['openFile']
@@ -52,6 +57,7 @@ module.exports =
wrappedCallback
showSaveDialog: (args...) ->
checkAppInitialized()
[window, options, callback] = parseArgs args...
options ?= title: 'Save'
@@ -72,6 +78,7 @@ module.exports =
wrappedCallback
showMessageBox: (args...) ->
checkAppInitialized()
[window, options, callback] = parseArgs args...
options ?= type: 'none'
@@ -93,5 +100,8 @@ module.exports =
window,
callback
showErrorBox: (args...) ->
binding.showErrorBox args...
# Mark standard asynchronous functions.
v8Util.setHiddenValue f, 'asynchronous', true for k, f of module.exports

View File

@@ -45,9 +45,12 @@ Menu::_init = ->
break
v8Util.setHiddenValue group[0], 'checked', true unless checked
Menu::popup = (window) ->
Menu::popup = (window, x, y) ->
throw new TypeError('Invalid window') unless window?.constructor is BrowserWindow
@_popup window
if x? and y?
@_popupAt(window, x, y)
else
@_popup window
Menu::append = (item) ->
@insert @getItemCount(), item

View File

@@ -1,3 +1,6 @@
app = require 'app'
throw new Error('Can not initialize protocol module before app is ready') unless app.isReady()
protocol = process.atomBinding('protocol').protocol
EventEmitter = require('events').EventEmitter

View File

@@ -1,4 +1,5 @@
EventEmitter = require('events').EventEmitter
binding = process.atomBinding 'web_contents'
ipc = require 'ipc'
module.exports.wrap = (webContents) ->
@@ -25,18 +26,37 @@ 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
# Translate |disposition| to string for 'new-window' event.
webContents.on '-new-window', (args..., disposition) ->
disposition =
switch disposition
when 2 then 'default'
when 4 then 'foreground-tab'
when 5 then 'background-tab'
when 6, 7 then 'new-window'
else 'other'
@emit 'new-window', args..., disposition
# Tell the rpc server that a render view has been deleted and we need to
# release all objects owned by it.
webContents.on 'render-view-deleted', (event, processId, routingId) ->
process.emit 'ATOM_BROWSER_RELEASE_RENDER_VIEW', "#{processId}-#{routingId}"
# Dispatch IPC messages to the ipc module.
webContents.on 'ipc-message', (event, channel, args...) =>
webContents.on 'ipc-message', (event, channel, args...) ->
Object.defineProperty event, 'sender', value: webContents
ipc.emit channel, event, args...
webContents.on 'ipc-message-sync', (event, channel, args...) =>
webContents.on 'ipc-message-sync', (event, channel, args...) ->
Object.defineProperty event, 'returnValue', set: (value) -> event.sendReply JSON.stringify(value)
Object.defineProperty event, 'sender', value: webContents
ipc.emit channel, event, args...
webContents
module.exports.create = (options={}) ->
@wrap binding.create(options)

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -7,15 +7,17 @@
#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_resource_dispatcher_host_delegate.h"
#include "atom/browser/atom_speech_recognition_manager_delegate.h"
#include "atom/browser/native_window.h"
#include "atom/browser/web_view/web_view_renderer_state.h"
#include "atom/browser/window_list.h"
#include "atom/common/options_switches.h"
#include "base/command_line.h"
#include "base/strings/string_number_conversions.h"
#include "chrome/browser/printing/printing_message_filter.h"
#include "chrome/browser/speech/tts_message_filter.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"
@@ -54,16 +56,10 @@ AtomBrowserClient::~AtomBrowserClient() {
void AtomBrowserClient::RenderProcessWillLaunch(
content::RenderProcessHost* host) {
int id = host->GetID();
host->AddFilter(new PrintingMessageFilter(host->GetID()));
host->AddFilter(new printing::PrintingMessageFilter(host->GetID()));
host->AddFilter(new TtsMessageFilter(id, host->GetBrowserContext()));
}
void AtomBrowserClient::ResourceDispatcherHostCreated() {
resource_dispatcher_delegate_.reset(new AtomResourceDispatcherHostDelegate);
content::ResourceDispatcherHost::Get()->SetDelegate(
resource_dispatcher_delegate_.get());
}
content::SpeechRecognitionManagerDelegate*
AtomBrowserClient::GetSpeechRecognitionManagerDelegate() {
return new AtomSpeechRecognitionManagerDelegate;
@@ -80,7 +76,7 @@ void AtomBrowserClient::OverrideWebkitPrefs(
prefs->javascript_enabled = true;
prefs->web_security_enabled = true;
prefs->javascript_can_open_windows_automatically = true;
prefs->plugins_enabled = false;
prefs->plugins_enabled = true;
prefs->dom_paste_enabled = true;
prefs->java_enabled = false;
prefs->allow_scripts_to_close_windows = true;
@@ -146,8 +142,26 @@ void AtomBrowserClient::AppendExtraCommandLineSwitches(
window = *iter;
}
if (window != NULL)
if (window != NULL) {
window->AppendExtraCommandLineSwitches(command_line, child_process_id);
} else {
// Append commnad line arguments for guest web view.
WebViewRendererState::WebViewInfo info;
if (WebViewRendererState::GetInstance()->GetInfo(child_process_id, &info)) {
command_line->AppendSwitchASCII(
switches::kGuestInstanceID,
base::IntToString(info.guest_instance_id));
command_line->AppendSwitchASCII(
switches::kNodeIntegration,
info.node_integration ? "true" : "false");
if (info.plugins)
command_line->AppendSwitch(switches::kEnablePlugins);
if (!info.preload_script.empty())
command_line->AppendSwitchPath(
switches::kPreloadScript,
info.preload_script);
}
}
dying_render_process_ = NULL;
}

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -11,8 +11,6 @@
namespace atom {
class AtomResourceDispatcherHostDelegate;
class AtomBrowserClient : public brightray::BrowserClient {
public:
AtomBrowserClient();
@@ -20,28 +18,24 @@ class AtomBrowserClient : public brightray::BrowserClient {
protected:
// content::ContentBrowserClient:
virtual void RenderProcessWillLaunch(
content::RenderProcessHost* host) OVERRIDE;
virtual void ResourceDispatcherHostCreated() OVERRIDE;
virtual content::SpeechRecognitionManagerDelegate*
void RenderProcessWillLaunch(content::RenderProcessHost* host) override;
content::SpeechRecognitionManagerDelegate*
GetSpeechRecognitionManagerDelegate() override;
virtual content::AccessTokenStore* CreateAccessTokenStore() OVERRIDE;
virtual void OverrideWebkitPrefs(content::RenderViewHost* render_view_host,
const GURL& url,
content::WebPreferences* prefs) OVERRIDE;
virtual bool ShouldSwapBrowsingInstancesForNavigation(
content::AccessTokenStore* CreateAccessTokenStore() 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;
virtual std::string GetApplicationLocale() OVERRIDE;
virtual void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
int child_process_id) OVERRIDE;
const GURL& new_url) override;
std::string GetApplicationLocale() override;
void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
int child_process_id) override;
private:
virtual brightray::BrowserMainParts* OverrideCreateBrowserMainParts(
const content::MainFunctionParams&) OVERRIDE;
scoped_ptr<AtomResourceDispatcherHostDelegate> resource_dispatcher_delegate_;
brightray::BrowserMainParts* OverrideCreateBrowserMainParts(
const content::MainFunctionParams&) override;
// The render process which would be swapped out soon.
content::RenderProcessHost* dying_render_process_;

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE 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/web_view/web_view_manager.h"
#include "base/threading/sequenced_worker_pool.h"
#include "base/threading/worker_pool.h"
#include "chrome/browser/browser_process.h"
@@ -68,6 +69,12 @@ net::URLRequestJobFactory* AtomBrowserContext::CreateURLRequestJobFactory(
return top_job_factory.release();
}
content::BrowserPluginGuestManager* AtomBrowserContext::GetGuestManager() {
if (!guest_manager_)
guest_manager_.reset(new WebViewManager(this));
return guest_manager_.get();
}
// static
AtomBrowserContext* AtomBrowserContext::Get() {
return static_cast<AtomBrowserContext*>(

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -12,6 +12,7 @@ class BrowserProcess;
namespace atom {
class AtomURLRequestJobFactory;
class WebViewManager;
class AtomBrowserContext : public brightray::BrowserContext {
public:
@@ -21,17 +22,20 @@ class AtomBrowserContext : public brightray::BrowserContext {
// Returns the browser context singleton.
static AtomBrowserContext* Get();
AtomURLRequestJobFactory* job_factory() const { return job_factory_; }
protected:
// brightray::URLRequestContextGetter::Delegate:
virtual net::URLRequestJobFactory* CreateURLRequestJobFactory(
content::ProtocolHandlerMap* handlers,
content::URLRequestInterceptorScopedVector* interceptors) OVERRIDE;
content::URLRequestInterceptorScopedVector* interceptors) override;
// content::BrowserContext:
virtual content::BrowserPluginGuestManager* GetGuestManager() override;
AtomURLRequestJobFactory* job_factory() const { return job_factory_; }
private:
// A fake BrowserProcess object that used to feed the source code from chrome.
scoped_ptr<BrowserProcess> fake_browser_process_;
scoped_ptr<WebViewManager> guest_manager_;
AtomURLRequestJobFactory* job_factory_; // Weak reference.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -13,6 +13,11 @@
namespace atom {
std::string GetApplicationName() {
std::string name = brightray::MainApplicationBundlePath().BaseName().AsUTF8Unsafe();
return name.substr(0, name.length() - 4/*.app*/);
}
void AtomBrowserMainParts::PreMainMessageLoopStart() {
// Initialize locale setting.
l10n_util::OverrideLocaleWithCocoaLocale();
@@ -20,13 +25,13 @@ void AtomBrowserMainParts::PreMainMessageLoopStart() {
// Force the NSApplication subclass to be used.
NSApplication* application = [AtomApplication sharedApplication];
AtomApplicationDelegate* delegate = [AtomApplicationDelegate alloc];
[NSApp setDelegate:delegate];
AtomApplicationDelegate* delegate = [[AtomApplicationDelegate alloc] init];
[NSApp setDelegate:(id<NSFileManagerDelegate>)delegate];
base::FilePath frameworkPath = brightray::MainApplicationBundlePath()
.Append("Contents")
.Append("Frameworks")
.Append("Atom Framework.framework");
.Append(GetApplicationName() + " Framework.framework");
NSBundle* frameworkBundle = [NSBundle
bundleWithPath:base::mac::FilePathToNSString(frameworkPath)];
NSNib* mainNib = [[NSNib alloc] initWithNibNamed:@"MainMenu"
@@ -41,7 +46,8 @@ void AtomBrowserMainParts::PreMainMessageLoopStart() {
}
void AtomBrowserMainParts::PostDestroyThreads() {
[[AtomApplication sharedApplication] setDelegate:nil];
[[NSApp delegate] release];
[NSApp setDelegate:nil];
}
} // namespace atom

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,50 +0,0 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "atom/browser/atom_resource_dispatcher_host_delegate.h"
#include <string>
#include "base/logging.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/resource_request_info.h"
#include "net/http/http_response_headers.h"
#include "net/url_request/url_request.h"
namespace atom {
namespace {
const char* kDisableXFrameOptions = "disable-x-frame-options";
} // namespace
AtomResourceDispatcherHostDelegate::AtomResourceDispatcherHostDelegate() {
}
AtomResourceDispatcherHostDelegate::~AtomResourceDispatcherHostDelegate() {
}
void AtomResourceDispatcherHostDelegate::OnResponseStarted(
net::URLRequest* request,
content::ResourceContext* resource_context,
content::ResourceResponse* response,
IPC::Sender* sender) {
// Check if frame's name contains "disable-x-frame-options"
int p, f;
if (!content::ResourceRequestInfo::GetRenderFrameForRequest(request, &p, &f))
return;
content::RenderFrameHost* frame = content::RenderFrameHost::FromID(p, f);
if (!frame)
return;
if (frame->GetFrameName().find(kDisableXFrameOptions) == std::string::npos)
return;
// Remove the "X-Frame-Options" from response headers.
net::HttpResponseHeaders* response_headers = request->response_headers();
if (response_headers && response_headers->HasHeader("x-frame-options"))
response_headers->RemoveHeader("x-frame-options");
}
} // namespace atom

View File

@@ -1,31 +0,0 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef ATOM_BROWSER_ATOM_RESOURCE_DISPATCHER_HOST_DELEGATE_H_
#define ATOM_BROWSER_ATOM_RESOURCE_DISPATCHER_HOST_DELEGATE_H_
#include "base/compiler_specific.h"
#include "content/public/browser/resource_dispatcher_host_delegate.h"
namespace atom {
class AtomResourceDispatcherHostDelegate
: public content::ResourceDispatcherHostDelegate {
public:
AtomResourceDispatcherHostDelegate();
virtual ~AtomResourceDispatcherHostDelegate();
// content::ResourceDispatcherHostDelegate:
virtual void OnResponseStarted(net::URLRequest* request,
content::ResourceContext* resource_context,
content::ResourceResponse* response,
IPC::Sender* sender) OVERRIDE;
private:
DISALLOW_COPY_AND_ASSIGN(AtomResourceDispatcherHostDelegate);
};
} // namespace atom
#endif // ATOM_BROWSER_ATOM_RESOURCE_DISPATCHER_HOST_DELEGATE_H_

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -13,7 +13,8 @@
namespace atom {
Browser::Browser()
: is_quiting_(false) {
: is_quiting_(false),
is_ready_(false) {
WindowList::AddObserver(this);
}
@@ -69,6 +70,10 @@ std::string Browser::GetName() const {
void Browser::SetName(const std::string& name) {
name_override_ = name;
#if defined(OS_WIN)
SetAppUserModelID(name);
#endif
}
bool Browser::OpenFile(const std::string& file_path) {
@@ -93,6 +98,7 @@ void Browser::WillFinishLaunching() {
}
void Browser::DidFinishLaunching() {
is_ready_ = true;
FOR_EACH_OBSERVER(BrowserObserver, observers_, OnFinishLaunching());
}

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -6,6 +6,7 @@
#define ATOM_BROWSER_BROWSER_H_
#include <string>
#include <vector>
#include "base/basictypes.h"
#include "base/compiler_specific.h"
@@ -13,6 +14,19 @@
#include "atom/browser/browser_observer.h"
#include "atom/browser/window_list_observer.h"
#if defined(OS_WIN)
#include "base/files/file_path.h"
#include "base/strings/string16.h"
#endif
namespace base {
class FilePath;
}
namespace ui {
class MenuModel;
}
namespace atom {
// This class is used for control application-wide operations.
@@ -44,6 +58,12 @@ class Browser : public WindowListObserver {
// Overrides the application name.
void SetName(const std::string& name);
// Add the |path| to recent documents list.
void AddRecentDocument(const base::FilePath& path);
// Clear the recent documents list.
void ClearRecentDocuments();
#if defined(OS_MACOSX)
// Bounce the dock icon.
enum BounceType {
@@ -60,8 +80,28 @@ class Browser : public WindowListObserver {
// Hide/Show dock.
void DockHide();
void DockShow();
// Set docks' menu.
void DockSetMenu(ui::MenuModel* model);
#endif // defined(OS_MACOSX)
#if defined(OS_WIN)
struct UserTask {
base::FilePath program;
base::string16 arguments;
base::string16 title;
base::string16 description;
base::FilePath icon_path;
int icon_index;
};
// Add a custom task to jump list.
void SetUserTasks(const std::vector<UserTask>& tasks);
// Set the application user model ID, called when "SetName" is called.
void SetAppUserModelID(const std::string& name);
#endif
// Tell the application to open a file.
bool OpenFile(const std::string& file_path);
@@ -84,6 +124,7 @@ class Browser : public WindowListObserver {
}
bool is_quiting() const { return is_quiting_; }
bool is_ready() const { return is_ready_; }
protected:
// Returns the version of application bundle or executable file.
@@ -99,15 +140,22 @@ class Browser : public WindowListObserver {
private:
// WindowListObserver implementations:
virtual void OnWindowCloseCancelled(NativeWindow* window) OVERRIDE;
virtual void OnWindowAllClosed() OVERRIDE;
void OnWindowCloseCancelled(NativeWindow* window) override;
void OnWindowAllClosed() override;
// Observers of the browser.
ObserverList<BrowserObserver> observers_;
// Whether "ready" event has been emitted.
bool is_ready_;
std::string version_override_;
std::string name_override_;
#if defined(OS_WIN)
base::string16 app_user_model_id_;
#endif
DISALLOW_COPY_AND_ASSIGN(Browser);
};

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -24,6 +24,12 @@ void Browser::Focus() {
}
}
void Browser::AddRecentDocument(const base::FilePath& path) {
}
void Browser::ClearRecentDocuments() {
}
std::string Browser::GetExecutableFileVersion() const {
return ATOM_VERSION_STRING;
}

View File

@@ -1,13 +1,15 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// 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/browser.h"
#import "atom/browser/mac/atom_application.h"
#import "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/strings/sys_string_conversions.h"
namespace atom {
@@ -16,6 +18,14 @@ void Browser::Focus() {
[[AtomApplication sharedApplication] activateIgnoringOtherApps:YES];
}
void Browser::AddRecentDocument(const base::FilePath& path) {
NSURL* u = [NSURL fileURLWithPath:base::mac::FilePathToNSString(path)];
[[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:u];
}
void Browser::ClearRecentDocuments() {
}
std::string Browser::GetExecutableFileVersion() const {
NSDictionary* infoDictionary = base::mac::OuterBundle().infoDictionary;
NSString *version = [infoDictionary objectForKey:@"CFBundleVersion"];
@@ -29,7 +39,7 @@ std::string Browser::GetExecutableFileProductName() const {
}
int Browser::DockBounce(BounceType type) {
return [[AtomApplication sharedApplication] requestUserAttention:type];
return [[AtomApplication sharedApplication] requestUserAttention:(NSRequestUserAttentionType)type];
}
void Browser::DockCancelBounce(int rid) {
@@ -60,4 +70,9 @@ void Browser::DockShow() {
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
}
void Browser::DockSetMenu(ui::MenuModel* model) {
AtomApplicationDelegate* delegate = (AtomApplicationDelegate*)[NSApp delegate];
[delegate setApplicationDockMenu:model];
}
} // namespace atom

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,17 +1,24 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// 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/browser.h"
#include <atlbase.h>
#include <propkey.h>
#include <windows.h>
#include <shlobj.h>
#include <shobjidl.h>
#include "base/base_paths.h"
#include "base/file_version_info.h"
#include "base/files/file_path.h"
#include "base/memory/scoped_ptr.h"
#include "base/path_service.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "base/win/win_util.h"
#include "base/win/windows_version.h"
#include "atom/common/atom_version.h"
namespace atom {
@@ -39,6 +46,83 @@ void Browser::Focus() {
EnumWindows(&WindowsEnumerationHandler, reinterpret_cast<LPARAM>(&pid));
}
void Browser::AddRecentDocument(const base::FilePath& path) {
if (base::win::GetVersion() < base::win::VERSION_WIN7)
return;
CComPtr<IShellItem> item;
HRESULT hr = SHCreateItemFromParsingName(
path.value().c_str(), NULL, IID_PPV_ARGS(&item));
if (SUCCEEDED(hr)) {
SHARDAPPIDINFO info;
info.psi = item;
info.pszAppID = app_user_model_id_.c_str();
SHAddToRecentDocs(SHARD_APPIDINFO, &info);
}
}
void Browser::ClearRecentDocuments() {
CComPtr<IApplicationDestinations> destinations;
if (FAILED(destinations.CoCreateInstance(CLSID_ApplicationDestinations,
NULL, CLSCTX_INPROC_SERVER)))
return;
if (FAILED(destinations->SetAppID(app_user_model_id_.c_str())))
return;
destinations->RemoveAllDestinations();
}
void Browser::SetUserTasks(const std::vector<UserTask>& tasks) {
CComPtr<ICustomDestinationList> destinations;
if (FAILED(destinations.CoCreateInstance(CLSID_DestinationList)))
return;
if (FAILED(destinations->SetAppID(app_user_model_id_.c_str())))
return;
// Start a transaction that updates the JumpList of this application.
UINT max_slots;
CComPtr<IObjectArray> removed;
if (FAILED(destinations->BeginList(&max_slots, IID_PPV_ARGS(&removed))))
return;
CComPtr<IObjectCollection> collection;
if (FAILED(collection.CoCreateInstance(CLSID_EnumerableObjectCollection)))
return;
for (auto& task : tasks) {
CComPtr<IShellLink> link;
if (FAILED(link.CoCreateInstance(CLSID_ShellLink)) ||
FAILED(link->SetPath(task.program.value().c_str())) ||
FAILED(link->SetArguments(task.arguments.c_str())) ||
FAILED(link->SetDescription(task.description.c_str())))
return;
if (!task.icon_path.empty() &&
FAILED(link->SetIconLocation(task.icon_path.value().c_str(),
task.icon_index)))
return;
CComQIPtr<IPropertyStore> property_store = link;
if (!base::win::SetStringValueForPropertyStore(property_store, PKEY_Title,
task.title.c_str()))
return;
if (FAILED(collection->AddObject(link)))
return;
}
// When the list is empty "AddUserTasks" could fail, so we don't check return
// value for it.
CComQIPtr<IObjectArray> task_array = collection;
destinations->AddUserTasks(task_array);
destinations->CommitList();
}
void Browser::SetAppUserModelID(const std::string& name) {
app_user_model_id_ = base::string16(L"atom-shell.app.");
app_user_model_id_ += base::UTF8ToUTF16(name);
SetCurrentProcessExplicitAppUserModelID(app_user_model_id_.c_str());
}
std::string Browser::GetExecutableFileVersion() const {
base::FilePath path;
if (PathService::Get(base::FILE_EXE, &path)) {

View File

@@ -48,14 +48,7 @@ if (option.file && !option.webdriver) {
} catch(e) {
if (e.code == 'MODULE_NOT_FOUND') {
app.focus();
console.error(e.stack);
dialog.showMessageBox({
type: 'warning',
buttons: ['OK'],
title: 'Error opening app',
message: 'The app provided is not a valid atom-shell app, please read the docs on how to write one:',
detail: 'https://github.com/atom/atom-shell/tree/master/docs'
});
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');
process.exit(1);
} else {
console.error('App throwed an error when running', e);

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -7,8 +7,7 @@
namespace atom {
JavascriptEnvironment::JavascriptEnvironment()
: isolate_holder_(gin::IsolateHolder::kNonStrictMode),
isolate_(isolate_holder_.isolate()),
: isolate_(isolate_holder_.isolate()),
isolate_scope_(isolate_),
locker_(isolate_),
handle_scope_(isolate_),

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -0,0 +1,131 @@
ipc = require 'ipc'
webContents = require 'web-contents'
webViewManager = null # Doesn't exist in early initialization.
supportedWebViewEvents = [
'did-finish-load'
'did-fail-load'
'did-frame-finish-load'
'did-start-loading'
'did-stop-loading'
'did-get-redirect-request'
'console-message'
'new-window'
'close'
'crashed'
'destroyed'
]
nextInstanceId = 0
guestInstances = {}
embedderElementsMap = {}
reverseEmbedderElementsMap = {}
# Generate guestInstanceId.
getNextInstanceId = (webContents) ->
++nextInstanceId
# Create a new guest instance.
createGuest = (embedder, params) ->
webViewManager ?= process.atomBinding 'web_view_manager'
id = getNextInstanceId embedder
guest = webContents.create
isGuest: true
guestInstanceId: id
storagePartitionId: params.storagePartitionId
guestInstances[id] = {guest, embedder}
# Destroy guest when the embedder is gone or navigated.
destroyEvents = ['destroyed', 'crashed', 'did-navigate-to-different-page']
destroy = ->
destroyGuest id if guestInstances[id]?
embedder.removeListener event, destroy for event in destroyEvents
embedder.once event, destroy for event in destroyEvents
# Init guest web view after attached.
guest.once 'did-attach', ->
params = @attachParams
delete @attachParams
@viewInstanceId = params.instanceId
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
if params.allowtransparency?
@setAllowTransparency params.allowtransparency
# Dispatch events to embedder.
for event in supportedWebViewEvents
do (event) ->
guest.on event, (_, args...) ->
embedder.send "ATOM_SHELL_GUEST_VIEW_INTERNAL_DISPATCH_EVENT-#{guest.viewInstanceId}", event, args...
# Autosize.
guest.on 'size-changed', (_, args...) ->
embedder.send "ATOM_SHELL_GUEST_VIEW_INTERNAL_SIZE_CHANGED-#{guest.viewInstanceId}", args...
id
# Attach the guest to an element of embedder.
attachGuest = (embedder, elementInstanceId, guestInstanceId, params) ->
guest = guestInstances[guestInstanceId].guest
# Destroy the old guest when attaching.
key = "#{embedder.getId()}-#{elementInstanceId}"
oldGuestInstanceId = embedderElementsMap[key]
if oldGuestInstanceId?
# Reattachment to the same guest is not currently supported.
return unless oldGuestInstanceId != guestInstanceId
return unless guestInstances[oldGuestInstanceId]?
destroyGuest oldGuestInstanceId
webViewManager.addGuest guestInstanceId, elementInstanceId, embedder, guest,
nodeIntegration: params.nodeintegration
plugins: params.plugins
preloadUrl: params.preload ? ''
guest.attachParams = params
embedderElementsMap[key] = guestInstanceId
reverseEmbedderElementsMap[guestInstanceId] = key
# Destroy an existing guest instance.
destroyGuest = (id) ->
webViewManager.removeGuest id
guestInstances[id].guest.destroy()
delete guestInstances[id]
key = reverseEmbedderElementsMap[id]
if key?
delete reverseEmbedderElementsMap[id]
delete embedderElementsMap[key]
ipc.on 'ATOM_SHELL_GUEST_VIEW_MANAGER_CREATE_GUEST', (event, type, params, requestId) ->
event.sender.send "ATOM_SHELL_RESPONSE_#{requestId}", createGuest(event.sender, params)
ipc.on 'ATOM_SHELL_GUEST_VIEW_MANAGER_ATTACH_GUEST', (event, elementInstanceId, guestInstanceId, params, requestId) ->
attachGuest event.sender, elementInstanceId, guestInstanceId, params
event.sender.send "ATOM_SHELL_RESPONSE_#{requestId}"
ipc.on 'ATOM_SHELL_GUEST_VIEW_MANAGER_DESTROY_GUEST', (event, id) ->
destroyGuest id
ipc.on 'ATOM_SHELL_GUEST_VIEW_MANAGER_SET_AUTO_SIZE', (event, id, params) ->
guestInstances[id]?.guest.setAutoSize params.enableAutoSize, params.min, params.max
ipc.on 'ATOM_SHELL_GUEST_VIEW_MANAGER_SET_ALLOW_TRANSPARENCY', (event, id, allowtransparency) ->
guestInstances[id]?.guest.setAllowTransparency allowtransparency
# Returns WebContents from its guest id.
exports.getGuest = (id) ->
guestInstances[id]?.guest
# Returns the embedder of the guest.
exports.getEmbedder = (id) ->
guestInstances[id]?.embedder

View File

@@ -0,0 +1,54 @@
ipc = require 'ipc'
BrowserWindow = require 'browser-window'
frameToGuest = {}
# Create a new guest created by |embedder| with |options|.
createGuest = (embedder, url, frameName, options) ->
guest = frameToGuest[frameName]
if frameName and guest?
guest.loadUrl url
return guest.id
guest = new BrowserWindow(options)
guest.loadUrl url
# When |embedder| is destroyed we should also destroy attached guest, and if
# guest is closed by user then we should prevent |embedder| from double
# closing guest.
closedByEmbedder = ->
guest.removeListener 'closed', closedByUser
guest.destroy() unless guest.isClosed()
closedByUser = ->
embedder.removeListener 'render-view-deleted', closedByEmbedder
embedder.once 'render-view-deleted', closedByEmbedder
guest.once 'closed', closedByUser
if frameName
frameToGuest[frameName] = guest
guest.frameName = frameName
guest.once 'closed', ->
delete frameToGuest[frameName]
guest.id
# Routed window.open messages.
ipc.on 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_OPEN', (event, args...) ->
[url, frameName, options] = args
event.sender.emit '-new-window', event, url, frameName, 7
if event.sender.isGuest() or event.defaultPrevented
event.returnValue = null
else
event.returnValue = createGuest event.sender, args...
ipc.on 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_CLOSE', (event, guestId) ->
return unless BrowserWindow.windows.has guestId
BrowserWindow.windows.get(guestId).destroy()
ipc.on 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_METHOD', (event, guestId, method, args...) ->
return unless BrowserWindow.windows.has guestId
BrowserWindow.windows.get(guestId)[method] args...
ipc.on 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WEB_CONTENTS_METHOD', (event, guestId, method, args...) ->
return unless BrowserWindow.windows.has guestId
BrowserWindow.windows.get(guestId).webContents?[method] args...

View File

@@ -23,9 +23,8 @@ process.argv.splice startMark, endMark - startMark + 1
globalPaths = module.globalPaths
globalPaths.push path.join process.resourcesPath, 'atom', 'browser', 'api', 'lib'
# Do loading in next tick since we still need some initialize work before
# native bindings can work.
setImmediate ->
# Following operations need extra bindings by AtomBindings.
process.once 'BIND_DONE', ->
# Import common settings.
require path.resolve(__dirname, '..', '..', 'common', 'lib', 'init.js')
@@ -46,20 +45,20 @@ setImmediate ->
# Don't quit on fatal error.
process.on 'uncaughtException', (error) ->
# Show error in GUI.
message = error.stack ? "#{error.name}: #{error.message}"
require('dialog').showMessageBox
type: 'warning'
title: 'A javascript error occured in the browser'
message: 'uncaughtException'
detail: message
buttons: ['OK']
stack = error.stack ? "#{error.name}: #{error.message}"
message = "Uncaught Exception:\n#{stack}"
require('dialog').showErrorBox 'A JavaScript error occured in the browser process', message
# Emit 'exit' event on quit.
require('app').on 'quit', ->
process.emit 'exit'
# Load the RPC server.
require './rpc-server.js'
require './rpc-server'
# Load the guest view manager.
require './guest-view-manager'
require './guest-window-manager'
# Now we try to load app's package.json.
packageJson = null

View File

@@ -94,11 +94,15 @@ ipc.on 'ATOM_BROWSER_GLOBAL', (event, name) ->
catch e
event.returnValue = errorToMeta e
ipc.on 'ATOM_BROWSER_CURRENT_WINDOW', (event) ->
ipc.on 'ATOM_BROWSER_CURRENT_WINDOW', (event, guestInstanceId) ->
try
BrowserWindow = require 'browser-window'
window = BrowserWindow.fromWebContents event.sender
window = BrowserWindow.fromDevToolsWebContents event.sender unless window?
if guestInstanceId?
guestViewManager = require './guest-view-manager'
window = BrowserWindow.fromWebContents guestViewManager.getEmbedder(guestInstanceId)
else
window = BrowserWindow.fromWebContents event.sender
window = BrowserWindow.fromDevToolsWebContents event.sender unless window?
event.returnValue = valueToMeta event.sender, window
catch e
event.returnValue = errorToMeta e
@@ -157,3 +161,10 @@ ipc.on 'ATOM_BROWSER_MEMBER_GET', (event, id, name) ->
ipc.on 'ATOM_BROWSER_DEREFERENCE', (event, storeId) ->
objectsRegistry.remove event.sender.getId(), storeId
ipc.on 'ATOM_BROWSER_GUEST_WEB_CONTENTS', (event, guestInstanceId) ->
try
guestViewManager = require './guest-view-manager'
event.returnValue = valueToMeta event.sender, guestViewManager.getGuest(guestInstanceId)
catch e
event.returnValue = errorToMeta e

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,10 +1,19 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#import <Cocoa/Cocoa.h>
#import "atom/browser/ui/cocoa/atom_menu_controller.h"
@interface AtomApplicationDelegate : NSObject<NSApplicationDelegate> {
@private
base::scoped_nsobject<AtomMenuController> menu_controller_;
}
- (id)init;
// Sets the menu that will be returned in "applicationDockMenu:".
- (void)setApplicationDockMenu:(ui::MenuModel*)model;
@end

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -10,6 +10,16 @@
@implementation AtomApplicationDelegate
- (id)init {
self = [super init];
menu_controller_.reset([[AtomMenuController alloc] init]);
return self;
}
- (void)setApplicationDockMenu:(ui::MenuModel*)model {
[menu_controller_ populateWithModel:model];
}
- (void)applicationWillFinishLaunching:(NSNotification*)notify {
atom::Browser::Get()->WillFinishLaunching();
}
@@ -18,6 +28,10 @@
atom::Browser::Get()->DidFinishLaunching();
}
- (NSMenu*)applicationDockMenu:(NSApplication*)sender {
return [menu_controller_ menu];
}
- (BOOL)application:(NSApplication*)sender
openFile:(NSString*)filename {
std::string filename_str(base::SysNSStringToUTF8(filename));

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -12,6 +12,7 @@
#include "atom/browser/atom_javascript_dialog_manager.h"
#include "atom/browser/browser.h"
#include "atom/browser/ui/file_dialog.h"
#include "atom/browser/web_dialog_helper.h"
#include "atom/browser/window_list.h"
#include "atom/common/api/api_messages.h"
#include "atom/common/atom_version.h"
@@ -30,6 +31,7 @@
#include "brightray/browser/inspectable_web_contents.h"
#include "brightray/browser/inspectable_web_contents_view.h"
#include "chrome/browser/printing/print_view_manager_basic.h"
#include "chrome/browser/ui/browser_dialogs.h"
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/invalidate_type.h"
#include "content/public/browser/navigation_entry.h"
@@ -48,11 +50,15 @@
#include "ipc/ipc_message_macros.h"
#include "native_mate/dictionary.h"
#include "ui/gfx/codec/png_codec.h"
#include "ui/gfx/geometry/size_conversions.h"
#include "ui/gfx/point.h"
#include "ui/gfx/rect.h"
#include "ui/gfx/screen.h"
#include "ui/gfx/size.h"
using content::NavigationEntry;
using content::RenderWidgetHostView;
using content::RenderWidgetHost;
namespace atom {
@@ -84,7 +90,7 @@ NativeWindow::NativeWindow(content::WebContents* web_contents,
has_frame_(true),
enable_larger_than_screen_(false),
is_closed_(false),
node_integration_("except-iframe"),
node_integration_(true),
has_dialog_attached_(false),
zoom_factor_(1.0),
weak_factory_(this),
@@ -94,12 +100,23 @@ NativeWindow::NativeWindow(content::WebContents* web_contents,
options.Get(switches::kFrame, &has_frame_);
options.Get(switches::kEnableLargerThanScreen, &enable_larger_than_screen_);
options.Get(switches::kNodeIntegration, &node_integration_);
// Read icon before window is created.
options.Get(switches::kIcon, &icon_);
// Read iframe security before any navigation.
options.Get(switches::kNodeIntegration, &node_integration_);
// The "preload" option must be absolute path.
if (options.Get(switches::kPreloadScript, &preload_script_) &&
!preload_script_.IsAbsolute()) {
LOG(ERROR) << "Path of \"preload\" script must be absolute.";
preload_script_.clear();
}
// Be compatible with old API of "node-integration" option.
std::string old_string_token;
if (options.Get(switches::kNodeIntegration, &old_string_token) &&
old_string_token != "disable")
node_integration_ = true;
// Read the web preferences.
options.Get(switches::kWebPreferences, &web_preferences_);
@@ -187,7 +204,7 @@ void NativeWindow::InitFromOptions(const mate::Dictionary& options) {
}
bool fullscreen;
if (options.Get(switches::kFullscreen, &fullscreen) && fullscreen) {
SetFullscreen(true);
SetFullScreen(true);
}
bool skip;
if (options.Get(switches::kSkipTaskbar, &skip) && skip) {
@@ -230,6 +247,20 @@ void NativeWindow::Print(bool silent, bool print_background) {
PrintNow(silent, print_background);
}
void NativeWindow::SetAutoHideMenuBar(bool auto_hide) {
}
bool NativeWindow::IsMenuBarAutoHide() {
return false;
}
void NativeWindow::SetMenuBarVisibility(bool visible) {
}
bool NativeWindow::IsMenuBarVisible() {
return true;
}
bool NativeWindow::HasModalDialog() {
return has_dialog_attached_;
}
@@ -262,31 +293,43 @@ void NativeWindow::BlurWebView() {
}
bool NativeWindow::IsWebViewFocused() {
content::RenderWidgetHostView* host_view =
RenderWidgetHostView* host_view =
GetWebContents()->GetRenderViewHost()->GetView();
return host_view && host_view->HasFocus();
}
void NativeWindow::CapturePage(const gfx::Rect& rect,
const CapturePageCallback& callback) {
content::RenderViewHost* render_view_host =
GetWebContents()->GetRenderViewHost();
content::RenderWidgetHostView* render_widget_host_view =
render_view_host->GetView();
if (!render_widget_host_view) {
content::WebContents* contents = GetWebContents();
RenderWidgetHostView* const view = contents->GetRenderWidgetHostView();
RenderWidgetHost* const host = view ? view->GetRenderWidgetHost() : nullptr;
if (!view || !host) {
callback.Run(std::vector<unsigned char>());
return;
}
GetWebContents()->GetRenderViewHost()->CopyFromBackingStore(
rect,
rect.IsEmpty() ? render_widget_host_view->GetViewBounds().size() :
rect.size(),
// Capture full page if user doesn't specify a |rect|.
const gfx::Size view_size = rect.IsEmpty() ? view->GetViewBounds().size() :
rect.size();
// By default, the requested bitmap size is the view size in screen
// coordinates. However, if there's more pixel detail available on the
// current system, increase the requested bitmap size to capture it all.
gfx::Size bitmap_size = view_size;
const gfx::NativeView native_view = view->GetNativeView();
gfx::Screen* const screen = gfx::Screen::GetScreenFor(native_view);
const float scale =
screen->GetDisplayNearestWindow(native_view).device_scale_factor();
if (scale > 1.0f)
bitmap_size = gfx::ToCeiledSize(gfx::ScaleSize(view_size, scale));
host->CopyFromBackingStore(
rect.IsEmpty() ? gfx::Rect(view_size) : rect,
bitmap_size,
base::Bind(&NativeWindow::OnCapturePageDone,
weak_factory_.GetWeakPtr(),
callback),
kAlpha_8_SkColorType);
kBGRA_8888_SkColorType);
}
void NativeWindow::DestroyWebContents() {
@@ -341,7 +384,11 @@ void NativeWindow::AppendExtraCommandLineSwitches(
base::CommandLine* command_line, int child_process_id) {
// Append --node-integration to renderer process.
command_line->AppendSwitchASCII(switches::kNodeIntegration,
node_integration_);
node_integration_ ? "true" : "false");
// Append --preload.
if (!preload_script_.empty())
command_line->AppendSwitchPath(switches::kPreloadScript, preload_script_);
// Append --zoom-factor.
if (zoom_factor_ != 1.0)
@@ -358,6 +405,10 @@ void NativeWindow::AppendExtraCommandLineSwitches(
command_line->AppendSwitch(::switches::kDisableDirectWrite);
#endif
// Check if plugins are enabled.
if (web_preferences_.Get("plugins", &b) && b)
command_line->AppendSwitch(switches::kEnablePlugins);
// This set of options are not availabe in WebPreferences, so we have to pass
// them via command line and enable them in renderer procss.
for (size_t i = 0; i < arraysize(kWebRuntimeFeatures); ++i) {
@@ -388,8 +439,6 @@ void NativeWindow::OverrideWebkitPrefs(const GURL& url,
prefs->experimental_webgl_enabled = b;
if (web_preferences_.Get("webaudio", &b))
prefs->webaudio_enabled = b;
if (web_preferences_.Get("plugins", &b))
prefs->plugins_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]);
@@ -417,6 +466,49 @@ void NativeWindow::NotifyWindowFocus() {
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnWindowFocus());
}
void NativeWindow::NotifyWindowMaximize() {
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnWindowMaximize());
}
void NativeWindow::NotifyWindowUnmaximize() {
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnWindowUnmaximize());
}
void NativeWindow::NotifyWindowMinimize() {
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnWindowMinimize());
}
void NativeWindow::NotifyWindowRestore() {
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnWindowRestore());
}
void NativeWindow::NotifyWindowEnterFullScreen() {
FOR_EACH_OBSERVER(NativeWindowObserver, observers_,
OnWindowEnterFullScreen());
}
void NativeWindow::NotifyWindowLeaveFullScreen() {
FOR_EACH_OBSERVER(NativeWindowObserver, observers_,
OnWindowLeaveFullScreen());
}
bool NativeWindow::ShouldCreateWebContents(
content::WebContents* web_contents,
int route_id,
WindowContainerType window_container_type,
const base::string16& frame_name,
const GURL& target_url,
const std::string& partition_id,
content::SessionStorageNamespace* session_storage_namespace) {
FOR_EACH_OBSERVER(NativeWindowObserver,
observers_,
WillCreatePopupWindow(frame_name,
target_url,
partition_id,
NEW_FOREGROUND_TAB));
return false;
}
// In atom-shell all reloads and navigations started by renderer process would
// be redirected to this method, so we can have precise control of how we
// would open the url (in our case, is to restart the renderer process). See
@@ -424,8 +516,15 @@ void NativeWindow::NotifyWindowFocus() {
content::WebContents* NativeWindow::OpenURLFromTab(
content::WebContents* source,
const content::OpenURLParams& params) {
if (params.disposition != CURRENT_TAB)
return NULL;
if (params.disposition != CURRENT_TAB) {
FOR_EACH_OBSERVER(NativeWindowObserver,
observers_,
WillCreatePopupWindow(base::string16(),
params.url,
"",
params.disposition));
return NULL;
}
content::NavigationController::LoadURLParams load_url_params(params.url);
load_url_params.referrer = params.referrer;
@@ -461,6 +560,28 @@ void NativeWindow::BeforeUnloadFired(content::WebContents* tab,
}
}
content::ColorChooser* NativeWindow::OpenColorChooser(
content::WebContents* web_contents,
SkColor color,
const std::vector<content::ColorSuggestion>& suggestions) {
return chrome::ShowColorChooser(web_contents, color);
}
void NativeWindow::RunFileChooser(content::WebContents* web_contents,
const content::FileChooserParams& params) {
if (!web_dialog_helper_)
web_dialog_helper_.reset(new WebDialogHelper(this));
web_dialog_helper_->RunFileChooser(web_contents, params);
}
void NativeWindow::EnumerateDirectory(content::WebContents* web_contents,
int request_id,
const base::FilePath& path) {
if (!web_dialog_helper_)
web_dialog_helper_.reset(new WebDialogHelper(this));
web_dialog_helper_->EnumerateDirectory(web_contents, request_id, path);
}
void NativeWindow::RequestToLockMouse(content::WebContents* web_contents,
bool user_gesture,
bool last_unlocked_by_target) {
@@ -619,6 +740,7 @@ void NativeWindow::NotifyWindowUnresponsive() {
void NativeWindow::OnCapturePageDone(const CapturePageCallback& callback,
bool succeed,
const SkBitmap& bitmap) {
SkAutoLockPixels screen_capture_lock(bitmap);
std::vector<unsigned char> data;
if (succeed)
gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, true, &data);

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -51,6 +51,7 @@ namespace atom {
class AtomJavaScriptDialogManager;
struct DraggableRegion;
class WebDialogHelper;
class NativeWindow : public brightray::DefaultWebContentsDelegate,
public brightray::InspectableWebContentsDelegate,
@@ -110,7 +111,7 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
virtual void Minimize() = 0;
virtual void Restore() = 0;
virtual bool IsMinimized() = 0;
virtual void SetFullscreen(bool fullscreen) = 0;
virtual void SetFullScreen(bool fullscreen) = 0;
virtual bool IsFullscreen() = 0;
virtual void SetSize(const gfx::Size& size) = 0;
virtual gfx::Size GetSize() = 0;
@@ -160,6 +161,12 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
// Print current page.
virtual void Print(bool silent, bool print_background);
// Toggle the menu bar.
virtual void SetAutoHideMenuBar(bool auto_hide);
virtual bool IsMenuBarAutoHide();
virtual void SetMenuBarVisibility(bool visible);
virtual bool IsMenuBarVisible();
// The same with closing a tab in a real browser.
//
// Should be called by platform code when user want to close the window.
@@ -185,6 +192,12 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
void NotifyWindowClosed();
void NotifyWindowBlur();
void NotifyWindowFocus();
void NotifyWindowMaximize();
void NotifyWindowUnmaximize();
void NotifyWindowMinimize();
void NotifyWindowRestore();
void NotifyWindowEnterFullScreen();
void NotifyWindowLeaveFullScreen();
void AddObserver(NativeWindowObserver* obs) {
observers_.AddObserver(obs);
@@ -214,43 +227,59 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
const std::vector<DraggableRegion>& regions) = 0;
// Implementations of content::WebContentsDelegate.
virtual content::WebContents* OpenURLFromTab(
bool ShouldCreateWebContents(
content::WebContents* web_contents,
int route_id,
WindowContainerType window_container_type,
const base::string16& frame_name,
const GURL& target_url,
const std::string& partition_id,
content::SessionStorageNamespace* session_storage_namespace) override;
content::WebContents* OpenURLFromTab(
content::WebContents* source,
const content::OpenURLParams& params) OVERRIDE;
virtual content::JavaScriptDialogManager*
GetJavaScriptDialogManager() OVERRIDE;
virtual void BeforeUnloadFired(content::WebContents* tab,
bool proceed,
bool* proceed_to_fire_unload) OVERRIDE;
virtual void RequestToLockMouse(content::WebContents* web_contents,
bool user_gesture,
bool last_unlocked_by_target) OVERRIDE;
virtual bool CanOverscrollContent() const OVERRIDE;
virtual void ActivateContents(content::WebContents* contents) OVERRIDE;
virtual void DeactivateContents(content::WebContents* contents) OVERRIDE;
virtual void MoveContents(content::WebContents* source,
const gfx::Rect& pos) OVERRIDE;
virtual void CloseContents(content::WebContents* source) OVERRIDE;
virtual bool IsPopupOrPanel(
const content::WebContents* source) const OVERRIDE;
virtual void RendererUnresponsive(content::WebContents* source) OVERRIDE;
virtual void RendererResponsive(content::WebContents* source) OVERRIDE;
const content::OpenURLParams& params) override;
content::JavaScriptDialogManager* GetJavaScriptDialogManager() override;
void BeforeUnloadFired(content::WebContents* tab,
bool proceed,
bool* proceed_to_fire_unload) override;
content::ColorChooser* OpenColorChooser(
content::WebContents* web_contents,
SkColor color,
const std::vector<content::ColorSuggestion>& suggestions) override;
void RunFileChooser(content::WebContents* web_contents,
const content::FileChooserParams& params) override;
void EnumerateDirectory(content::WebContents* web_contents,
int request_id,
const base::FilePath& path) override;
void RequestToLockMouse(content::WebContents* web_contents,
bool user_gesture,
bool last_unlocked_by_target) override;
bool CanOverscrollContent() const override;
void ActivateContents(content::WebContents* contents) override;
void DeactivateContents(content::WebContents* contents) override;
void MoveContents(content::WebContents* source,
const gfx::Rect& pos) override;
void CloseContents(content::WebContents* source) override;
bool IsPopupOrPanel(
const content::WebContents* source) const override;
void RendererUnresponsive(content::WebContents* source) override;
void RendererResponsive(content::WebContents* source) override;
// Implementations of content::WebContentsObserver.
virtual void BeforeUnloadFired(const base::TimeTicks& proceed_time) OVERRIDE;
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
void BeforeUnloadFired(const base::TimeTicks& proceed_time) override;
bool OnMessageReceived(const IPC::Message& message) override;
// Implementations of content::NotificationObserver.
virtual void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) override;
// Implementations of brightray::InspectableWebContentsDelegate.
virtual void DevToolsSaveToFile(const std::string& url,
const std::string& content,
bool save_as) OVERRIDE;
virtual void DevToolsAppendToFile(const std::string& url,
const std::string& content) OVERRIDE;
void DevToolsSaveToFile(const std::string& url,
const std::string& content,
bool save_as) override;
void DevToolsAppendToFile(const std::string& url,
const std::string& content) override;
// Whether window has standard frame.
bool has_frame_;
@@ -288,8 +317,8 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
// The windows has been closed.
bool is_closed_;
// The security token of iframe.
std::string node_integration_;
// Whether node integration is enabled.
bool node_integration_;
// There is a dialog that has been attached to window.
bool has_dialog_attached_;
@@ -301,11 +330,15 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate,
// Web preferences.
mate::PersistentDictionary web_preferences_;
// The script to load before page's JavaScript starts to run.
base::FilePath preload_script_;
// Page's default zoom factor.
double zoom_factor_;
base::WeakPtrFactory<NativeWindow> weak_factory_;
scoped_ptr<WebDialogHelper> web_dialog_helper_;
scoped_ptr<AtomJavaScriptDialogManager> dialog_manager_;
// Notice that inspectable_web_contents_ must be placed after dialog_manager_,

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -11,6 +11,7 @@
#include "base/memory/scoped_ptr.h"
#include "atom/browser/native_window.h"
@class FullSizeContentView;
class SkRegion;
namespace atom {
@@ -37,7 +38,7 @@ class NativeWindowMac : public NativeWindow {
virtual void Minimize() OVERRIDE;
virtual void Restore() OVERRIDE;
virtual bool IsMinimized() OVERRIDE;
virtual void SetFullscreen(bool fullscreen) OVERRIDE;
virtual void SetFullScreen(bool fullscreen) OVERRIDE;
virtual bool IsFullscreen() OVERRIDE;
virtual void SetSize(const gfx::Size& size) OVERRIDE;
virtual gfx::Size GetSize() OVERRIDE;
@@ -98,6 +99,9 @@ class NativeWindowMac : public NativeWindow {
base::scoped_nsobject<NSWindow> window_;
// The view that will fill the whole frameless window.
base::scoped_nsobject<FullSizeContentView> content_view_;
bool is_kiosk_;
NSInteger attention_request_id_; // identifier from requestUserAttention

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -25,6 +25,31 @@ static const CGFloat kAtomWindowCornerRadius = 4.0;
- (CGFloat)roundedCornerRadius;
@end
// This view always takes the size of its superview. It is intended to be used
// as a NSWindow's contentView. It is needed because NSWindow's implementation
// explicitly resizes the contentView at inopportune times.
@interface FullSizeContentView : NSView
@end
@implementation FullSizeContentView
// This method is directly called by NSWindow during a window resize on OSX
// 10.10.0, beta 2. We must override it to prevent the content view from
// shrinking.
- (void)setFrameSize:(NSSize)size {
if ([self superview])
size = [[self superview] bounds].size;
[super setFrameSize:size];
}
// The contentView gets moved around during certain full-screen operations.
// This is less than ideal, and should eventually be removed.
- (void)viewDidMoveToSuperview {
[self setFrame:[[self superview] bounds]];
}
@end
@interface AtomNSWindowDelegate : NSObject<NSWindowDelegate> {
@private
atom::NativeWindowMac* shell_;
@@ -81,11 +106,36 @@ static const CGFloat kAtomWindowCornerRadius = 4.0;
shell_->ClipWebView();
}
- (void)windowDidMiniaturize:(NSNotification*)notification {
shell_->NotifyWindowMinimize();
}
- (void)windowDidDeminiaturize:(NSNotification*)notification {
shell_->NotifyWindowRestore();
}
- (BOOL)windowShouldZoom:(NSWindow*)window toFrame:(NSRect)newFrame {
// Cocoa doen't have concept of maximize/unmaximize, so wee need to emulate
// them by calculating size change when zooming.
if (newFrame.size.width < [window frame].size.width ||
newFrame.size.height < [window frame].size.height)
shell_->NotifyWindowUnmaximize();
else
shell_->NotifyWindowMaximize();
return YES;
}
- (void)windowDidEnterFullScreen:(NSNotification*)notification {
shell_->NotifyWindowEnterFullScreen();
}
- (void)windowDidExitFullScreen:(NSNotification*)notification {
if (!shell_->has_frame()) {
NSWindow* window = shell_->GetNativeWindow();
[[window standardWindowButton:NSWindowFullScreenButton] setHidden:YES];
}
shell_->NotifyWindowLeaveFullScreen();
}
- (void)windowWillClose:(NSNotification*)notification {
@@ -375,7 +425,7 @@ bool NativeWindowMac::IsMinimized() {
return [window_ isMiniaturized];
}
void NativeWindowMac::SetFullscreen(bool fullscreen) {
void NativeWindowMac::SetFullScreen(bool fullscreen) {
if (fullscreen == IsFullscreen())
return;
@@ -520,10 +570,10 @@ void NativeWindowMac::SetKiosk(bool kiosk) {
NSApplicationPresentationDisableHideApplication;
[NSApp setPresentationOptions:options];
is_kiosk_ = true;
SetFullscreen(true);
SetFullScreen(true);
} else if (!kiosk && is_kiosk_) {
is_kiosk_ = false;
SetFullscreen(false);
SetFullScreen(false);
[NSApp setPresentationOptions:kiosk_options_];
}
}
@@ -604,8 +654,10 @@ bool NativeWindowMac::IsWithinDraggableRegion(NSPoint point) const {
}
void NativeWindowMac::HandleMouseEvent(NSEvent* event) {
NSPoint current_mouse_location =
[window_ convertBaseToScreen:[event locationInWindow]];
NSPoint eventLoc = [event locationInWindow];
NSRect mouseRect = [window_ convertRectToScreen:NSMakeRect(eventLoc.x, eventLoc.y, 0, 0)];
NSPoint current_mouse_location = mouseRect.origin;
if ([event type] == NSLeftMouseDown) {
NSPoint frame_origin = [window_ frame].origin;
@@ -663,9 +715,24 @@ void NativeWindowMac::InstallView() {
[view setFrame:[[window_ contentView] bounds]];
[[window_ contentView] addSubview:view];
} else {
NSView* frameView = [[window_ contentView] superview];
[view setFrame:[frameView bounds]];
[frameView addSubview:view];
if (base::mac::IsOSYosemiteOrLater()) {
// In OSX 10.10, adding subviews to the root view for the NSView hierarchy
// produces warnings. To eliminate the warnings, we resize the contentView
// to fill the window, and add subviews to that.
// http://crbug.com/380412
content_view_.reset([[FullSizeContentView alloc] init]);
[content_view_
setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
[content_view_ setFrame:[[[window_ contentView] superview] bounds]];
[window_ setContentView:content_view_];
[view setFrame:[content_view_ bounds]];
[content_view_ addSubview:view];
} else {
NSView* frameView = [[window_ contentView] superview];
[view setFrame:[frameView bounds]];
[frameView addSubview:view];
}
ClipWebView();

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -7,6 +7,10 @@
#include <string>
#include "base/strings/string16.h"
#include "ui/base/window_open_disposition.h"
#include "url/gurl.h"
namespace atom {
class NativeWindowObserver {
@@ -17,6 +21,12 @@ class NativeWindowObserver {
virtual void OnPageTitleUpdated(bool* prevent_default,
const std::string& title) {}
// Called when the web page in window wants to create a popup window.
virtual void WillCreatePopupWindow(const base::string16& frame_name,
const GURL& target_url,
const std::string& partition_id,
WindowOpenDisposition disposition) {}
// Called when the window is gonna closed.
virtual void WillCloseWindow(bool* prevent_default) {}
@@ -29,6 +39,14 @@ class NativeWindowObserver {
// Called when window gains focus.
virtual void OnWindowFocus() {}
// Called when window state changed.
virtual void OnWindowMaximize() {}
virtual void OnWindowUnmaximize() {}
virtual void OnWindowMinimize() {}
virtual void OnWindowRestore() {}
virtual void OnWindowEnterFullScreen() {}
virtual void OnWindowLeaveFullScreen() {}
// Called when renderer is hung.
virtual void OnRendererUnresponsive() {}

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -32,10 +32,11 @@
#include "atom/browser/browser.h"
#include "atom/browser/ui/views/global_menu_bar_x11.h"
#include "atom/browser/ui/views/frameless_view.h"
#include "atom/browser/ui/x/window_state_watcher.h"
#include "atom/browser/ui/x/x_window_utils.h"
#include "base/environment.h"
#include "base/nix/xdg_util.h"
#include "base/strings/stringprintf.h"
#include "base/strings/string_util.h"
#include "chrome/browser/ui/libgtk2ui/unity_service.h"
#include "dbus/bus.h"
#include "dbus/object_proxy.h"
@@ -48,6 +49,7 @@
#include "base/win/scoped_comptr.h"
#include "base/win/windows_version.h"
#include "ui/base/win/shell.h"
#include "ui/gfx/win/dpi.h"
#include "ui/views/win/hwnd_util.h"
#endif
@@ -63,10 +65,6 @@ const int kMenuBarHeight = 25;
#endif
#if defined(USE_X11)
// Counts how many window has already been created, it will be used to set the
// window role for X11.
int kWindowsCreated = 0;
// Returns true if the bus name "com.canonical.AppMenu.Registrar" is available.
bool ShouldUseGlobalMenuBar() {
dbus::Bus::Options options;
@@ -113,9 +111,12 @@ bool IsAltKey(const content::NativeWebKeyboardEvent& event) {
bool IsAltModifier(const content::NativeWebKeyboardEvent& event) {
typedef content::NativeWebKeyboardEvent::Modifiers Modifiers;
return (event.modifiers == Modifiers::AltKey) ||
(event.modifiers == (Modifiers::AltKey | Modifiers::IsLeft)) ||
(event.modifiers == (Modifiers::AltKey | Modifiers::IsRight));
int modifiers = event.modifiers;
modifiers &= ~Modifiers::NumLockOn;
modifiers &= ~Modifiers::CapsLockOn;
return (modifiers == Modifiers::AltKey) ||
(modifiers == (Modifiers::AltKey | Modifiers::IsLeft)) ||
(modifiers == (Modifiers::AltKey | Modifiers::IsRight));
}
class NativeWindowClientView : public views::ClientView {
@@ -145,6 +146,9 @@ NativeWindowViews::NativeWindowViews(content::WebContents* web_contents,
menu_bar_autohide_(false),
menu_bar_visible_(false),
menu_bar_alt_pressed_(false),
#if defined(OS_WIN)
is_minimized_(false),
#endif
keyboard_event_handler_(new views::UnhandledKeyboardEventHandler),
use_content_size_(false),
resizable_(true) {
@@ -179,18 +183,20 @@ NativeWindowViews::NativeWindowViews(content::WebContents* web_contents,
params.remove_standard_frame = !has_frame_;
#if defined(USE_X11)
std::string name = Browser::Get()->GetName();
// Set WM_WINDOW_ROLE.
params.wm_role_name = base::StringPrintf(
"%s/%s/%d", "Atom Shell", Browser::Get()->GetName().c_str(),
++kWindowsCreated);
params.wm_role_name = "browser-window";
// Set WM_CLASS.
params.wm_class_name = "atom";
params.wm_class_class = "Atom";
params.wm_class_name = base::StringToLowerASCII(name);
params.wm_class_class = name;
#endif
window_->Init(params);
#if defined(USE_X11)
// Start monitoring window states.
window_state_watcher_.reset(new WindowStateWatcher(this));
// Set _GTK_THEME_VARIANT to dark if we have "dark-theme" option set.
bool use_dark_theme = false;
if (options.Get(switches::kDarkTheme, &use_dark_theme) && use_dark_theme) {
@@ -224,6 +230,23 @@ NativeWindowViews::NativeWindowViews(content::WebContents* web_contents,
use_content_size_)
bounds = ContentBoundsToWindowBounds(bounds);
#if defined(OS_WIN)
if (!has_frame_) {
// Set Window style so that we get a minimize and maximize animation when
// frameless.
DWORD frame_style = WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX |
WS_CAPTION;
::SetWindowLong(GetAcceleratedWidget(), GWL_STYLE, frame_style);
}
#endif
// TODO(zcbenz): This was used to force using native frame on Windows 2003, we
// should check whether setting it in InitParams can work.
if (has_frame_) {
window_->set_frame_type(views::Widget::FrameType::FRAME_TYPE_FORCE_NATIVE);
window_->FrameTypeChanged();
}
window_->UpdateWindowIcon();
window_->CenterWindow(bounds.size());
Layout();
@@ -296,8 +319,15 @@ bool NativeWindowViews::IsMinimized() {
return window_->IsMinimized();
}
void NativeWindowViews::SetFullscreen(bool fullscreen) {
void NativeWindowViews::SetFullScreen(bool fullscreen) {
window_->SetFullscreen(fullscreen);
#if defined(OS_WIN)
// There is no native fullscreen state on Windows.
if (fullscreen)
NotifyWindowEnterFullScreen();
else
NotifyWindowLeaveFullScreen();
#endif
}
bool NativeWindowViews::IsFullscreen() {
@@ -469,7 +499,7 @@ void NativeWindowViews::SetSkipTaskbar(bool skip) {
}
void NativeWindowViews::SetKiosk(bool kiosk) {
SetFullscreen(kiosk);
SetFullScreen(kiosk);
}
bool NativeWindowViews::IsKiosk() {
@@ -541,6 +571,38 @@ void NativeWindowViews::SetProgressBar(double progress) {
#endif
}
void NativeWindowViews::SetAutoHideMenuBar(bool auto_hide) {
menu_bar_autohide_ = auto_hide;
}
bool NativeWindowViews::IsMenuBarAutoHide() {
return menu_bar_autohide_;
}
void NativeWindowViews::SetMenuBarVisibility(bool visible) {
if (!menu_bar_ || menu_bar_visible_ == visible)
return;
// Always show the accelerator when the auto-hide menu bar shows.
if (menu_bar_autohide_)
menu_bar_->SetAcceleratorVisibility(visible);
menu_bar_visible_ = visible;
if (visible) {
DCHECK_EQ(child_count(), 1);
AddChildView(menu_bar_.get());
} else {
DCHECK_EQ(child_count(), 2);
RemoveChildView(menu_bar_.get());
}
Layout();
}
bool NativeWindowViews::IsMenuBarVisible() {
return menu_bar_visible_;
}
gfx::AcceleratedWidget NativeWindowViews::GetAcceleratedWidget() {
return GetNativeWindow()->GetHost()->GetAcceleratedWidget();
}
@@ -582,10 +644,8 @@ void NativeWindowViews::OnWidgetActivationChanged(
GetWebContents()->Focus();
// Hide menu bar when window is blured.
if (!active && menu_bar_autohide_ && menu_bar_visible_) {
if (!active && menu_bar_autohide_ && menu_bar_visible_)
SetMenuBarVisibility(false);
Layout();
}
}
void NativeWindowViews::DeleteDelegate() {
@@ -657,34 +717,57 @@ views::ClientView* NativeWindowViews::CreateClientView(views::Widget* widget) {
views::NonClientFrameView* NativeWindowViews::CreateNonClientFrameView(
views::Widget* widget) {
#if defined(OS_WIN)
if (ui::win::IsAeroGlassEnabled()) {
WinFrameView* frame_view = new WinFrameView;
frame_view->Init(this, widget);
return frame_view;
}
#elif defined(OS_LINUX)
WinFrameView* frame_view = new WinFrameView;
frame_view->Init(this, widget);
return frame_view;
#else
if (has_frame_) {
return new views::NativeFrameView(widget);
} else {
FramelessView* frame_view = new FramelessView;
FramelessView* frame_view = new FramelessView;
frame_view->Init(this, widget);
return frame_view;
}
#endif
return NULL;
}
#if defined(OS_WIN)
bool NativeWindowViews::ExecuteWindowsCommand(int command_id) {
// Windows uses the 4 lower order bits of |command_id| for type-specific
// information so we must exclude this when comparing.
static const int sc_mask = 0xFFF0;
if ((command_id & sc_mask) == SC_MINIMIZE) {
NotifyWindowMinimize();
is_minimized_ = true;
} else if ((command_id & sc_mask) == SC_RESTORE) {
if (is_minimized_)
NotifyWindowRestore();
else
NotifyWindowUnmaximize();
is_minimized_ = false;
} else if ((command_id & sc_mask) == SC_MAXIMIZE) {
NotifyWindowMaximize();
}
return false;
}
#endif
gfx::ImageSkia NativeWindowViews::GetDevToolsWindowIcon() {
return GetWindowAppIcon();
}
#if defined(USE_X11)
void NativeWindowViews::GetDevToolsWindowWMClass(
std::string* name, std::string* class_name) {
*class_name = Browser::Get()->GetName();
*name = base::StringToLowerASCII(*class_name);
}
#endif
void NativeWindowViews::HandleMouseDown() {
// Hide menu bar when web view is clicked.
if (menu_bar_autohide_ && menu_bar_visible_) {
if (menu_bar_autohide_ && menu_bar_visible_)
SetMenuBarVisibility(false);
Layout();
}
}
void NativeWindowViews::HandleKeyboardEvent(
@@ -704,10 +787,8 @@ void NativeWindowViews::HandleKeyboardEvent(
if (event.type == blink::WebInputEvent::RawKeyDown && !IsAltKey(event) &&
IsAltModifier(event)) {
if (!menu_bar_visible_ &&
(menu_bar_->GetAcceleratorIndex(event.windowsKeyCode) != -1)) {
(menu_bar_->GetAcceleratorIndex(event.windowsKeyCode) != -1))
SetMenuBarVisibility(true);
Layout();
}
menu_bar_->ActivateAccelerator(event.windowsKeyCode);
return;
}
@@ -716,8 +797,7 @@ void NativeWindowViews::HandleKeyboardEvent(
return;
// Toggle the menu bar only when a single Alt is released.
if (event.type == blink::WebInputEvent::RawKeyDown && IsAltKey(event) &&
IsAltModifier(event)) {
if (event.type == blink::WebInputEvent::RawKeyDown && IsAltKey(event)) {
// When a single Alt is pressed:
menu_bar_alt_pressed_ = true;
} else if (event.type == blink::WebInputEvent::KeyUp && IsAltKey(event) &&
@@ -728,7 +808,6 @@ void NativeWindowViews::HandleKeyboardEvent(
// When a single Alt is released right after a Alt is pressed:
menu_bar_alt_pressed_ = false;
SetMenuBarVisibility(!menu_bar_visible_);
Layout();
} else {
// When any other keys except single Alt have been pressed/released:
menu_bar_alt_pressed_ = false;
@@ -759,31 +838,20 @@ void NativeWindowViews::RegisterAccelerators(ui::MenuModel* menu_model) {
gfx::Rect NativeWindowViews::ContentBoundsToWindowBounds(
const gfx::Rect& bounds) {
#if defined(OS_WIN)
gfx::Rect dpi_bounds = gfx::win::DIPToScreenRect(bounds);
gfx::Rect window_bounds = gfx::win::ScreenToDIPRect(
window_->non_client_view()->GetWindowBoundsForClientBounds(dpi_bounds));
#else
gfx::Rect window_bounds =
window_->non_client_view()->GetWindowBoundsForClientBounds(bounds);
#endif
if (menu_bar_ && menu_bar_visible_)
window_bounds.set_height(window_bounds.height() + kMenuBarHeight);
return window_bounds;
}
void NativeWindowViews::SetMenuBarVisibility(bool visible) {
if (!menu_bar_)
return;
// Always show the accelerator when the auto-hide menu bar shows.
if (menu_bar_autohide_)
menu_bar_->SetAcceleratorVisibility(visible);
menu_bar_visible_ = visible;
if (visible) {
DCHECK_EQ(child_count(), 1);
AddChildView(menu_bar_.get());
} else {
DCHECK_EQ(child_count(), 2);
RemoveChildView(menu_bar_.get());
}
}
// static
NativeWindow* NativeWindow::Create(content::WebContents* web_contents,
const mate::Dictionary& options) {

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -22,6 +22,7 @@ namespace atom {
class GlobalMenuBarX11;
class MenuBar;
class WindowStateWatcher;
class NativeWindowViews : public NativeWindow,
public views::WidgetDelegateView,
@@ -32,47 +33,51 @@ class NativeWindowViews : public NativeWindow,
virtual ~NativeWindowViews();
// NativeWindow:
virtual void Close() OVERRIDE;
virtual void CloseImmediately() OVERRIDE;
virtual void Move(const gfx::Rect& pos) OVERRIDE;
virtual void Focus(bool focus) OVERRIDE;
virtual bool IsFocused() OVERRIDE;
virtual void Show() OVERRIDE;
virtual void ShowInactive() OVERRIDE;
virtual void Hide() OVERRIDE;
virtual bool IsVisible() OVERRIDE;
virtual void Maximize() OVERRIDE;
virtual void Unmaximize() OVERRIDE;
virtual bool IsMaximized() OVERRIDE;
virtual void Minimize() OVERRIDE;
virtual void Restore() OVERRIDE;
virtual bool IsMinimized() OVERRIDE;
virtual void SetFullscreen(bool fullscreen) OVERRIDE;
virtual bool IsFullscreen() OVERRIDE;
virtual void SetSize(const gfx::Size& size) OVERRIDE;
virtual gfx::Size GetSize() OVERRIDE;
virtual void SetContentSize(const gfx::Size& size) OVERRIDE;
virtual gfx::Size GetContentSize() OVERRIDE;
virtual void SetMinimumSize(const gfx::Size& size) OVERRIDE;
virtual gfx::Size GetMinimumSize() OVERRIDE;
virtual void SetMaximumSize(const gfx::Size& size) OVERRIDE;
virtual gfx::Size GetMaximumSize() OVERRIDE;
virtual void SetResizable(bool resizable) OVERRIDE;
virtual bool IsResizable() OVERRIDE;
virtual void SetAlwaysOnTop(bool top) OVERRIDE;
virtual bool IsAlwaysOnTop() OVERRIDE;
virtual void Center() OVERRIDE;
virtual void SetPosition(const gfx::Point& position) OVERRIDE;
virtual gfx::Point GetPosition() OVERRIDE;
virtual void SetTitle(const std::string& title) OVERRIDE;
virtual std::string GetTitle() OVERRIDE;
virtual void FlashFrame(bool flash) OVERRIDE;
virtual void SetSkipTaskbar(bool skip) OVERRIDE;
virtual void SetKiosk(bool kiosk) OVERRIDE;
virtual bool IsKiosk() OVERRIDE;
virtual void SetMenu(ui::MenuModel* menu_model) OVERRIDE;
virtual gfx::NativeWindow GetNativeWindow() OVERRIDE;
virtual void SetProgressBar(double value) OVERRIDE;
void Close() override;
void CloseImmediately() override;
void Move(const gfx::Rect& pos) override;
void Focus(bool focus) override;
bool IsFocused() override;
void Show() override;
void ShowInactive() override;
void Hide() override;
bool IsVisible() override;
void Maximize() override;
void Unmaximize() override;
bool IsMaximized() override;
void Minimize() override;
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;
void SetContentSize(const gfx::Size& size) override;
gfx::Size GetContentSize() override;
void SetMinimumSize(const gfx::Size& size) override;
gfx::Size GetMinimumSize() override;
void SetMaximumSize(const gfx::Size& size) override;
gfx::Size GetMaximumSize() override;
void SetResizable(bool resizable) override;
bool IsResizable() override;
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;
void SetSkipTaskbar(bool skip) override;
void SetKiosk(bool kiosk) override;
bool IsKiosk() override;
void SetMenu(ui::MenuModel* menu_model) override;
gfx::NativeWindow GetNativeWindow() override;
void SetProgressBar(double value) override;
void SetAutoHideMenuBar(bool auto_hide) override;
bool IsMenuBarAutoHide() override;
void SetMenuBarVisibility(bool visible) override;
bool IsMenuBarVisible() override;
gfx::AcceleratedWidget GetAcceleratedWidget();
@@ -81,43 +86,50 @@ class NativeWindowViews : public NativeWindow,
private:
// NativeWindow:
virtual void UpdateDraggableRegions(
const std::vector<DraggableRegion>& regions) OVERRIDE;
void UpdateDraggableRegions(
const std::vector<DraggableRegion>& regions) override;
// views::WidgetObserver:
virtual void OnWidgetActivationChanged(
views::Widget* widget, bool active) OVERRIDE;
void OnWidgetActivationChanged(
views::Widget* widget, bool active) override;
// views::WidgetDelegate:
virtual void DeleteDelegate() OVERRIDE;
virtual views::View* GetInitiallyFocusedView() OVERRIDE;
virtual bool CanResize() const OVERRIDE;
virtual bool CanMaximize() const OVERRIDE;
virtual base::string16 GetWindowTitle() const OVERRIDE;
virtual bool ShouldHandleSystemCommands() const OVERRIDE;
virtual gfx::ImageSkia GetWindowAppIcon() OVERRIDE;
virtual gfx::ImageSkia GetWindowIcon() OVERRIDE;
virtual views::Widget* GetWidget() OVERRIDE;
virtual const views::Widget* GetWidget() const OVERRIDE;
virtual views::View* GetContentsView() OVERRIDE;
virtual bool ShouldDescendIntoChildForEventHandling(
void DeleteDelegate() override;
views::View* GetInitiallyFocusedView() override;
bool CanResize() const override;
bool CanMaximize() const override;
base::string16 GetWindowTitle() const override;
bool ShouldHandleSystemCommands() const override;
gfx::ImageSkia GetWindowAppIcon() override;
gfx::ImageSkia GetWindowIcon() override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
views::View* GetContentsView() override;
bool ShouldDescendIntoChildForEventHandling(
gfx::NativeView child,
const gfx::Point& location) OVERRIDE;
virtual views::ClientView* CreateClientView(views::Widget* widget) OVERRIDE;
virtual views::NonClientFrameView* CreateNonClientFrameView(
views::Widget* widget) OVERRIDE;
const gfx::Point& location) override;
views::ClientView* CreateClientView(views::Widget* widget) override;
views::NonClientFrameView* CreateNonClientFrameView(
views::Widget* widget) override;
#if defined(OS_WIN)
bool ExecuteWindowsCommand(int command_id) override;
#endif
// brightray::InspectableWebContentsDelegate:
virtual gfx::ImageSkia GetDevToolsWindowIcon() OVERRIDE;
gfx::ImageSkia GetDevToolsWindowIcon() override;
#if defined(USE_X11)
void GetDevToolsWindowWMClass(
std::string* name, std::string* class_name) override;
#endif
// content::WebContentsDelegate:
virtual void HandleMouseDown() OVERRIDE;
virtual void HandleKeyboardEvent(
void HandleMouseDown() override;
void HandleKeyboardEvent(
content::WebContents*,
const content::NativeWebKeyboardEvent& event) OVERRIDE;
const content::NativeWebKeyboardEvent& event) override;
// views::View:
virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE;
bool AcceleratorPressed(const ui::Accelerator& accelerator) override;
// Register accelerators supported by the menu model.
void RegisterAccelerators(ui::MenuModel* menu_model);
@@ -126,9 +138,6 @@ 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);
// Show/Hide the menu bar.
void SetMenuBarVisibility(bool visible);
scoped_ptr<views::Widget> window_;
views::View* web_view_; // Managed by inspectable_web_contents_.
@@ -139,6 +148,13 @@ class NativeWindowViews : public NativeWindow,
#if defined(USE_X11)
scoped_ptr<GlobalMenuBarX11> global_menu_bar_;
// Handles window state events.
scoped_ptr<WindowStateWatcher> window_state_watcher_;
#elif defined(OS_WIN)
// Records window was whether restored from minimized state or maximized
// state.
bool is_minimized_;
#endif
// Handles unhandled keyboard messages coming back from the renderer process.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
@@ -22,7 +22,7 @@ AdapterRequestJob::AdapterRequestJob(ProtocolHandler* protocol_handler,
}
void AdapterRequestJob::Start() {
DCHECK(!real_job_);
DCHECK(!real_job_.get());
content::BrowserThread::PostTask(
content::BrowserThread::UI,
FROM_HERE,
@@ -31,35 +31,35 @@ void AdapterRequestJob::Start() {
}
void AdapterRequestJob::Kill() {
if (real_job_) // Kill could happen when real_job_ is created.
if (real_job_.get()) // Kill could happen when real_job_ is created.
real_job_->Kill();
}
bool AdapterRequestJob::ReadRawData(net::IOBuffer* buf,
int buf_size,
int *bytes_read) {
DCHECK(real_job_);
DCHECK(!real_job_.get());
return real_job_->ReadRawData(buf, buf_size, bytes_read);
}
bool AdapterRequestJob::IsRedirectResponse(GURL* location,
int* http_status_code) {
DCHECK(real_job_);
DCHECK(!real_job_.get());
return real_job_->IsRedirectResponse(location, http_status_code);
}
net::Filter* AdapterRequestJob::SetupFilter() const {
DCHECK(real_job_);
DCHECK(!real_job_.get());
return real_job_->SetupFilter();
}
bool AdapterRequestJob::GetMimeType(std::string* mime_type) const {
DCHECK(real_job_);
DCHECK(!real_job_.get());
return real_job_->GetMimeType(mime_type);
}
bool AdapterRequestJob::GetCharset(std::string* charset) {
DCHECK(real_job_);
DCHECK(!real_job_.get());
return real_job_->GetCharset(charset);
}

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2013 GitHub, Inc. All rights reserved.
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

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