mirror of
https://github.com/electron/electron.git
synced 2026-02-26 03:01:17 -05:00
Compare commits
12 Commits
roller/nod
...
v18.0.0-al
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
87590da2fb | ||
|
|
493751b321 | ||
|
|
36008e0dea | ||
|
|
2871698148 | ||
|
|
9d8dde5c76 | ||
|
|
f72efecf95 | ||
|
|
5b45cb3f77 | ||
|
|
ad2b136425 | ||
|
|
94f4c18d7c | ||
|
|
f7f41fee99 | ||
|
|
907e9c8c0e | ||
|
|
4d2968bfc1 |
7
BUILD.gn
7
BUILD.gn
@@ -1401,11 +1401,13 @@ dist_zip("electron_dist_zip") {
|
||||
if (is_linux) {
|
||||
data_deps += [ "//sandbox/linux:chrome_sandbox" ]
|
||||
}
|
||||
deps = data_deps
|
||||
outputs = [ "$root_build_dir/dist.zip" ]
|
||||
}
|
||||
|
||||
dist_zip("electron_ffmpeg_zip") {
|
||||
data_deps = [ "//third_party/ffmpeg" ]
|
||||
deps = data_deps
|
||||
outputs = [ "$root_build_dir/ffmpeg.zip" ]
|
||||
}
|
||||
|
||||
@@ -1423,6 +1425,7 @@ group("electron_chromedriver") {
|
||||
dist_zip("electron_chromedriver_zip") {
|
||||
testonly = true
|
||||
data_deps = electron_chromedriver_deps
|
||||
deps = data_deps
|
||||
outputs = [ "$root_build_dir/chromedriver.zip" ]
|
||||
}
|
||||
|
||||
@@ -1441,6 +1444,7 @@ group("electron_mksnapshot") {
|
||||
|
||||
dist_zip("electron_mksnapshot_zip") {
|
||||
data_deps = mksnapshot_deps
|
||||
deps = data_deps
|
||||
outputs = [ "$root_build_dir/mksnapshot.zip" ]
|
||||
}
|
||||
|
||||
@@ -1451,6 +1455,7 @@ copy("hunspell_dictionaries") {
|
||||
|
||||
dist_zip("hunspell_dictionaries_zip") {
|
||||
data_deps = [ ":hunspell_dictionaries" ]
|
||||
deps = data_deps
|
||||
flatten = true
|
||||
|
||||
outputs = [ "$root_build_dir/hunspell_dictionaries.zip" ]
|
||||
@@ -1464,6 +1469,7 @@ copy("libcxx_headers") {
|
||||
|
||||
dist_zip("libcxx_headers_zip") {
|
||||
data_deps = [ ":libcxx_headers" ]
|
||||
deps = data_deps
|
||||
flatten = true
|
||||
flatten_relative_to = rebase_path(
|
||||
"$target_gen_dir/electron_libcxx_include/buildtools/third_party/libc++/trunk",
|
||||
@@ -1479,6 +1485,7 @@ copy("libcxxabi_headers") {
|
||||
|
||||
dist_zip("libcxxabi_headers_zip") {
|
||||
data_deps = [ ":libcxxabi_headers" ]
|
||||
deps = data_deps
|
||||
flatten = true
|
||||
flatten_relative_to = rebase_path(
|
||||
"$target_gen_dir/electron_libcxxabi_include/buildtools/third_party/libc++abi/trunk",
|
||||
|
||||
@@ -1 +1 @@
|
||||
18.0.0-nightly.20220201
|
||||
18.0.0-alpha.3
|
||||
@@ -516,6 +516,15 @@ Emitted when the `WebContents` loses focus.
|
||||
|
||||
Emitted when the `WebContents` gains focus.
|
||||
|
||||
Note that on macOS, having focus means the `WebContents` is the first responder
|
||||
of window, so switching focus between windows would not trigger the `focus` and
|
||||
`blur` events of `WebContents`, as the first responder of each window is not
|
||||
changed.
|
||||
|
||||
The `focus` and `blur` events of `WebContents` should only be used to detect
|
||||
focus change between different `WebContents` and `BrowserView` in the same
|
||||
window.
|
||||
|
||||
#### Event: 'devtools-opened'
|
||||
|
||||
Emitted when DevTools is opened.
|
||||
@@ -1092,7 +1101,7 @@ Returns `string` - The user agent for this web page.
|
||||
|
||||
* `css` string
|
||||
* `options` Object (optional)
|
||||
* `cssOrigin` string (optional) - Can be either 'user' or 'author'; Specifying 'user' enables you to prevent websites from overriding the CSS you insert. Default is 'author'.
|
||||
* `cssOrigin` string (optional) - Can be either 'user' or 'author'. Sets the [cascade origin](https://www.w3.org/TR/css3-cascade/#cascade-origin) of the inserted stylesheet. Default is 'author'.
|
||||
|
||||
Returns `Promise<string>` - A promise that resolves with a key for the inserted CSS that can later be used to remove the CSS via `contents.removeInsertedCSS(key)`.
|
||||
|
||||
|
||||
@@ -26,4 +26,5 @@ Special notes:
|
||||
| 14.0.0 | -- | 2021-May-27 | 2021-Aug-31 | M93 | v14.17 |
|
||||
| 15.0.0 | 2021-Jul-20 | 2021-Sep-01 | 2021-Sep-21 | M94 | v16.5 |
|
||||
| 16.0.0 | 2021-Sep-23 | 2021-Oct-20 | 2021-Nov-16 | M96 | v16.9 |
|
||||
| 17.0.0 | 2021-Nov-18 | 2022-Jan-06 | 2022-Feb-01 | M98 | TBD |
|
||||
| 17.0.0 | 2021-Nov-18 | 2022-Jan-06 | 2022-Feb-01 | M98 | v16.13 |
|
||||
| 18.0.0 | 2022-Feb-03 | 2022-Mar-03 | 2022-Mar-29 | M100 | TBD |
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "electron",
|
||||
"version": "18.0.0-nightly.20220201",
|
||||
"version": "18.0.0-alpha.3",
|
||||
"repository": "https://github.com/electron/electron",
|
||||
"description": "Build cross platform desktop apps with JavaScript, HTML, and CSS",
|
||||
"devDependencies": {
|
||||
|
||||
@@ -1450,6 +1450,12 @@ bool ElectronBrowserClient::PreSpawnChild(sandbox::TargetPolicy* policy,
|
||||
}
|
||||
#endif // defined(OS_WIN)
|
||||
|
||||
void BindElectronBrowser(
|
||||
mojo::PendingAssociatedReceiver<electron::mojom::ElectronBrowser> receiver,
|
||||
content::RenderFrameHost* frame_host) {
|
||||
ElectronBrowserHandlerImpl::Create(frame_host, std::move(receiver));
|
||||
}
|
||||
|
||||
bool ElectronBrowserClient::BindAssociatedReceiverFromFrame(
|
||||
content::RenderFrameHost* render_frame_host,
|
||||
const std::string& interface_name,
|
||||
@@ -1461,6 +1467,13 @@ bool ElectronBrowserClient::BindAssociatedReceiverFromFrame(
|
||||
render_frame_host);
|
||||
return true;
|
||||
}
|
||||
if (interface_name == electron::mojom::ElectronBrowser::Name_) {
|
||||
BindElectronBrowser(
|
||||
mojo::PendingAssociatedReceiver<electron::mojom::ElectronBrowser>(
|
||||
std::move(*handle)),
|
||||
render_frame_host);
|
||||
return true;
|
||||
}
|
||||
#if BUILDFLAG(ENABLE_PRINTING)
|
||||
if (interface_name == printing::mojom::PrintManagerHost::Name_) {
|
||||
mojo::PendingAssociatedReceiver<printing::mojom::PrintManagerHost> receiver(
|
||||
@@ -1522,12 +1535,6 @@ void ElectronBrowserClient::BindHostReceiverForRenderer(
|
||||
#endif
|
||||
}
|
||||
|
||||
void BindElectronBrowser(
|
||||
content::RenderFrameHost* frame_host,
|
||||
mojo::PendingReceiver<electron::mojom::ElectronBrowser> receiver) {
|
||||
ElectronBrowserHandlerImpl::Create(frame_host, std::move(receiver));
|
||||
}
|
||||
|
||||
#if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
|
||||
void BindMimeHandlerService(
|
||||
content::RenderFrameHost* frame_host,
|
||||
@@ -1576,8 +1583,6 @@ void ElectronBrowserClient::RegisterBrowserInterfaceBindersForFrame(
|
||||
base::BindRepeating(&BindNetworkHintsHandler));
|
||||
map->Add<blink::mojom::BadgeService>(
|
||||
base::BindRepeating(&badging::BadgeManager::BindFrameReceiver));
|
||||
map->Add<electron::mojom::ElectronBrowser>(
|
||||
base::BindRepeating(&BindElectronBrowser));
|
||||
map->Add<blink::mojom::KeyboardLockService>(base::BindRepeating(
|
||||
&content::KeyboardLockServiceImpl::CreateMojoService));
|
||||
#if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
namespace electron {
|
||||
ElectronBrowserHandlerImpl::ElectronBrowserHandlerImpl(
|
||||
content::RenderFrameHost* frame_host,
|
||||
mojo::PendingReceiver<mojom::ElectronBrowser> receiver)
|
||||
mojo::PendingAssociatedReceiver<mojom::ElectronBrowser> receiver)
|
||||
: render_process_id_(frame_host->GetProcess()->GetID()),
|
||||
render_frame_id_(frame_host->GetRoutingID()) {
|
||||
content::WebContents* web_contents =
|
||||
@@ -135,7 +135,7 @@ content::RenderFrameHost* ElectronBrowserHandlerImpl::GetRenderFrameHost() {
|
||||
// static
|
||||
void ElectronBrowserHandlerImpl::Create(
|
||||
content::RenderFrameHost* frame_host,
|
||||
mojo::PendingReceiver<mojom::ElectronBrowser> receiver) {
|
||||
mojo::PendingAssociatedReceiver<mojom::ElectronBrowser> receiver) {
|
||||
new ElectronBrowserHandlerImpl(frame_host, std::move(receiver));
|
||||
}
|
||||
} // namespace electron
|
||||
|
||||
@@ -23,10 +23,11 @@ class ElectronBrowserHandlerImpl : public mojom::ElectronBrowser,
|
||||
public:
|
||||
explicit ElectronBrowserHandlerImpl(
|
||||
content::RenderFrameHost* render_frame_host,
|
||||
mojo::PendingReceiver<mojom::ElectronBrowser> receiver);
|
||||
mojo::PendingAssociatedReceiver<mojom::ElectronBrowser> receiver);
|
||||
|
||||
static void Create(content::RenderFrameHost* frame_host,
|
||||
mojo::PendingReceiver<mojom::ElectronBrowser> receiver);
|
||||
static void Create(
|
||||
content::RenderFrameHost* frame_host,
|
||||
mojo::PendingAssociatedReceiver<mojom::ElectronBrowser> receiver);
|
||||
|
||||
// disable copy
|
||||
ElectronBrowserHandlerImpl(const ElectronBrowserHandlerImpl&) = delete;
|
||||
@@ -75,7 +76,7 @@ class ElectronBrowserHandlerImpl : public mojom::ElectronBrowser,
|
||||
const int render_process_id_;
|
||||
const int render_frame_id_;
|
||||
|
||||
mojo::Receiver<mojom::ElectronBrowser> receiver_{this};
|
||||
mojo::AssociatedReceiver<mojom::ElectronBrowser> receiver_{this};
|
||||
|
||||
base::WeakPtrFactory<ElectronBrowserHandlerImpl> weak_factory_{this};
|
||||
};
|
||||
|
||||
@@ -329,15 +329,14 @@ NativeWindowViews::NativeWindowViews(const gin_helper::Dictionary& options,
|
||||
// Set Window style so that we get a minimize and maximize animation when
|
||||
// frameless.
|
||||
DWORD frame_style = WS_CAPTION | WS_OVERLAPPED;
|
||||
if (resizable_)
|
||||
if (resizable_ && thick_frame_)
|
||||
frame_style |= WS_THICKFRAME;
|
||||
if (minimizable_)
|
||||
frame_style |= WS_MINIMIZEBOX;
|
||||
if (maximizable_)
|
||||
frame_style |= WS_MAXIMIZEBOX;
|
||||
// We should not show a frame for transparent window.
|
||||
if (!thick_frame_)
|
||||
frame_style &= ~(WS_THICKFRAME | WS_CAPTION);
|
||||
if (!thick_frame_ || !has_frame())
|
||||
frame_style &= ~WS_CAPTION;
|
||||
::SetWindowLong(GetAcceleratedWidget(), GWL_STYLE, frame_style);
|
||||
}
|
||||
|
||||
|
||||
@@ -50,8 +50,8 @@ END
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 18,0,0,20220201
|
||||
PRODUCTVERSION 18,0,0,20220201
|
||||
FILEVERSION 18,0,0,3
|
||||
PRODUCTVERSION 18,0,0,3
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
|
||||
@@ -99,4 +99,21 @@ bool ElectronDesktopWindowTreeHostWin::GetClientAreaInsets(
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ElectronDesktopWindowTreeHostWin::HandleMouseEvent(ui::MouseEvent* event) {
|
||||
// Call the default implementation of this method to get the event to its
|
||||
// proper handler.
|
||||
bool handled = views::DesktopWindowTreeHostWin::HandleMouseEvent(event);
|
||||
|
||||
// On WCO-enabled windows, we need to mark non-client mouse moved events as
|
||||
// handled so they don't incorrectly propogate back to the OS.
|
||||
if (native_window_view_->IsWindowControlsOverlayEnabled() &&
|
||||
event->type() == ui::ET_MOUSE_MOVED &&
|
||||
(event->flags() & ui::EF_IS_NON_CLIENT) != 0) {
|
||||
event->SetHandled();
|
||||
handled = true;
|
||||
}
|
||||
|
||||
return handled;
|
||||
}
|
||||
|
||||
} // namespace electron
|
||||
|
||||
@@ -36,6 +36,7 @@ class ElectronDesktopWindowTreeHostWin
|
||||
bool GetDwmFrameInsetsInPixels(gfx::Insets* insets) const override;
|
||||
bool GetClientAreaInsets(gfx::Insets* insets,
|
||||
HMONITOR monitor) const override;
|
||||
bool HandleMouseEvent(ui::MouseEvent* event) override;
|
||||
|
||||
private:
|
||||
NativeWindowViews* native_window_view_; // weak ref
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#include "shell/common/node_bindings.h"
|
||||
#include "shell/common/node_includes.h"
|
||||
#include "shell/common/v8_value_serializer.h"
|
||||
#include "third_party/blink/public/common/browser_interface_broker_proxy.h"
|
||||
#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
|
||||
#include "third_party/blink/public/web/web_local_frame.h"
|
||||
#include "third_party/blink/public/web/web_message_port_converter.h"
|
||||
|
||||
@@ -59,8 +59,8 @@ class IPCRenderer : public gin::Wrappable<IPCRenderer>,
|
||||
v8::Global<v8::Context>(isolate, isolate->GetCurrentContext());
|
||||
weak_context_.SetWeak();
|
||||
|
||||
render_frame->GetBrowserInterfaceBroker()->GetInterface(
|
||||
electron_browser_remote_.BindNewPipeAndPassReceiver());
|
||||
render_frame->GetRemoteAssociatedInterfaces()->GetInterface(
|
||||
&electron_browser_remote_);
|
||||
}
|
||||
|
||||
void OnDestruct() override { electron_browser_remote_.reset(); }
|
||||
@@ -223,7 +223,8 @@ class IPCRenderer : public gin::Wrappable<IPCRenderer>,
|
||||
}
|
||||
|
||||
v8::Global<v8::Context> weak_context_;
|
||||
mojo::Remote<electron::mojom::ElectronBrowser> electron_browser_remote_;
|
||||
mojo::AssociatedRemote<electron::mojom::ElectronBrowser>
|
||||
electron_browser_remote_;
|
||||
};
|
||||
|
||||
gin::WrapperInfo IPCRenderer::kWrapperInfo = {gin::kEmbedderNativeGin};
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
#include "shell/renderer/api/electron_api_context_bridge.h"
|
||||
#include "shell/renderer/api/electron_api_spell_check_client.h"
|
||||
#include "shell/renderer/renderer_client_base.h"
|
||||
#include "third_party/blink/public/common/browser_interface_broker_proxy.h"
|
||||
#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
|
||||
#include "third_party/blink/public/common/page/page_zoom.h"
|
||||
#include "third_party/blink/public/common/web_cache/web_cache_resource_type_stats.h"
|
||||
#include "third_party/blink/public/common/web_preferences/web_preferences.h"
|
||||
@@ -453,9 +453,9 @@ class WebFrameRenderer : public gin::Wrappable<WebFrameRenderer>,
|
||||
if (!MaybeGetRenderFrame(isolate, "setZoomLevel", &render_frame))
|
||||
return;
|
||||
|
||||
mojo::Remote<mojom::ElectronBrowser> browser_remote;
|
||||
render_frame->GetBrowserInterfaceBroker()->GetInterface(
|
||||
browser_remote.BindNewPipeAndPassReceiver());
|
||||
mojo::AssociatedRemote<mojom::ElectronBrowser> browser_remote;
|
||||
render_frame->GetRemoteAssociatedInterfaces()->GetInterface(
|
||||
&browser_remote);
|
||||
browser_remote->SetTemporaryZoomLevel(level);
|
||||
}
|
||||
|
||||
@@ -465,9 +465,9 @@ class WebFrameRenderer : public gin::Wrappable<WebFrameRenderer>,
|
||||
if (!MaybeGetRenderFrame(isolate, "getZoomLevel", &render_frame))
|
||||
return result;
|
||||
|
||||
mojo::Remote<mojom::ElectronBrowser> browser_remote;
|
||||
render_frame->GetBrowserInterfaceBroker()->GetInterface(
|
||||
browser_remote.BindNewPipeAndPassReceiver());
|
||||
mojo::AssociatedRemote<mojom::ElectronBrowser> browser_remote;
|
||||
render_frame->GetRemoteAssociatedInterfaces()->GetInterface(
|
||||
&browser_remote);
|
||||
browser_remote->DoGetZoomLevel(&result);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#include "shell/common/options_switches.h"
|
||||
#include "shell/common/world_ids.h"
|
||||
#include "shell/renderer/renderer_client_base.h"
|
||||
#include "third_party/blink/public/common/browser_interface_broker_proxy.h"
|
||||
#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
|
||||
#include "third_party/blink/public/common/web_preferences/web_preferences.h"
|
||||
#include "third_party/blink/public/platform/web_isolated_world_info.h"
|
||||
#include "third_party/blink/public/web/blink.h"
|
||||
@@ -149,9 +149,8 @@ void ElectronRenderFrameObserver::DraggableRegionsChanged() {
|
||||
regions.push_back(std::move(region));
|
||||
}
|
||||
|
||||
mojo::Remote<mojom::ElectronBrowser> browser_remote;
|
||||
render_frame_->GetBrowserInterfaceBroker()->GetInterface(
|
||||
browser_remote.BindNewPipeAndPassReceiver());
|
||||
mojo::AssociatedRemote<mojom::ElectronBrowser> browser_remote;
|
||||
render_frame_->GetRemoteAssociatedInterfaces()->GetInterface(&browser_remote);
|
||||
browser_remote->UpdateDraggableRegions(std::move(regions));
|
||||
}
|
||||
|
||||
@@ -169,9 +168,9 @@ void ElectronRenderFrameObserver::OnDestruct() {
|
||||
void ElectronRenderFrameObserver::DidMeaningfulLayout(
|
||||
blink::WebMeaningfulLayout layout_type) {
|
||||
if (layout_type == blink::WebMeaningfulLayout::kVisuallyNonEmpty) {
|
||||
mojo::Remote<mojom::ElectronBrowser> browser_remote;
|
||||
render_frame_->GetBrowserInterfaceBroker()->GetInterface(
|
||||
browser_remote.BindNewPipeAndPassReceiver());
|
||||
mojo::AssociatedRemote<mojom::ElectronBrowser> browser_remote;
|
||||
render_frame_->GetRemoteAssociatedInterfaces()->GetInterface(
|
||||
&browser_remote);
|
||||
browser_remote->OnFirstNonEmptyLayout();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3419,20 +3419,39 @@ describe('BrowserWindow module', () => {
|
||||
const savePageJsPath = path.join(savePageDir, 'save_page_files', 'test.js');
|
||||
const savePageCssPath = path.join(savePageDir, 'save_page_files', 'test.css');
|
||||
|
||||
after(() => {
|
||||
afterEach(() => {
|
||||
closeAllWindows();
|
||||
|
||||
try {
|
||||
fs.unlinkSync(savePageCssPath);
|
||||
fs.unlinkSync(savePageJsPath);
|
||||
fs.unlinkSync(savePageHtmlPath);
|
||||
fs.rmdirSync(path.join(savePageDir, 'save_page_files'));
|
||||
fs.rmdirSync(savePageDir);
|
||||
} catch (e) {
|
||||
// Ignore error
|
||||
}
|
||||
} catch {}
|
||||
});
|
||||
afterEach(closeAllWindows);
|
||||
|
||||
it('should save page to disk', async () => {
|
||||
it('should save page to disk with HTMLOnly', async () => {
|
||||
const w = new BrowserWindow({ show: false });
|
||||
await w.loadFile(path.join(fixtures, 'pages', 'save_page', 'index.html'));
|
||||
await w.webContents.savePage(savePageHtmlPath, 'HTMLOnly');
|
||||
|
||||
expect(fs.existsSync(savePageHtmlPath)).to.be.true('html path');
|
||||
expect(fs.existsSync(savePageJsPath)).to.be.false('js path');
|
||||
expect(fs.existsSync(savePageCssPath)).to.be.false('css path');
|
||||
});
|
||||
|
||||
it('should save page to disk with MHTML', async () => {
|
||||
const w = new BrowserWindow({ show: false });
|
||||
await w.loadFile(path.join(fixtures, 'pages', 'save_page', 'index.html'));
|
||||
await w.webContents.savePage(savePageHtmlPath, 'MHTML');
|
||||
|
||||
expect(fs.existsSync(savePageHtmlPath)).to.be.true('html path');
|
||||
expect(fs.existsSync(savePageJsPath)).to.be.false('js path');
|
||||
expect(fs.existsSync(savePageCssPath)).to.be.false('css path');
|
||||
});
|
||||
|
||||
it('should save page to disk with HTMLComplete', async () => {
|
||||
const w = new BrowserWindow({ show: false });
|
||||
await w.loadFile(path.join(fixtures, 'pages', 'save_page', 'index.html'));
|
||||
await w.webContents.savePage(savePageHtmlPath, 'HTMLComplete');
|
||||
|
||||
@@ -826,15 +826,20 @@ describe('webContents module', () => {
|
||||
});
|
||||
});
|
||||
|
||||
const moveFocusToDevTools = async (win: BrowserWindow) => {
|
||||
const devToolsOpened = emittedOnce(win.webContents, 'devtools-opened');
|
||||
win.webContents.openDevTools({ mode: 'right' });
|
||||
await devToolsOpened;
|
||||
win.webContents.devToolsWebContents!.focus();
|
||||
};
|
||||
|
||||
describe('focus event', () => {
|
||||
afterEach(closeAllWindows);
|
||||
|
||||
it('is triggered when web contents is focused', async () => {
|
||||
const w = new BrowserWindow({ show: false });
|
||||
await w.loadURL('about:blank');
|
||||
const devToolsOpened = emittedOnce(w.webContents, 'devtools-opened');
|
||||
w.webContents.openDevTools();
|
||||
await devToolsOpened;
|
||||
w.webContents.devToolsWebContents!.focus();
|
||||
await moveFocusToDevTools(w);
|
||||
const focusPromise = emittedOnce(w.webContents, 'focus');
|
||||
w.webContents.focus();
|
||||
await expect(focusPromise).to.eventually.be.fulfilled();
|
||||
@@ -849,16 +854,17 @@ describe('webContents module', () => {
|
||||
window2.loadURL('about:blank')
|
||||
]);
|
||||
|
||||
const focusPromise1 = emittedOnce(window1.webContents, 'focus');
|
||||
const focusPromise2 = emittedOnce(window2.webContents, 'focus');
|
||||
|
||||
window1.showInactive();
|
||||
window2.showInactive();
|
||||
|
||||
let focusPromise = emittedOnce(window1.webContents, 'focus');
|
||||
window1.focus();
|
||||
await expect(focusPromise).to.eventually.be.fulfilled();
|
||||
await expect(focusPromise1).to.eventually.be.fulfilled();
|
||||
|
||||
focusPromise = emittedOnce(window2.webContents, 'focus');
|
||||
window2.focus();
|
||||
await expect(focusPromise).to.eventually.be.fulfilled();
|
||||
await expect(focusPromise2).to.eventually.be.fulfilled();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -867,11 +873,9 @@ describe('webContents module', () => {
|
||||
it('is triggered when web contents is blurred', async () => {
|
||||
const w = new BrowserWindow({ show: true });
|
||||
await w.loadURL('about:blank');
|
||||
w.webContents.focus();
|
||||
const blurPromise = emittedOnce(w.webContents, 'blur');
|
||||
const devToolsOpened = emittedOnce(w.webContents, 'devtools-opened');
|
||||
w.webContents.openDevTools({ mode: 'detach' });
|
||||
await devToolsOpened;
|
||||
w.webContents.devToolsWebContents!.focus();
|
||||
await moveFocusToDevTools(w);
|
||||
await expect(blurPromise).to.eventually.be.fulfilled();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -8,7 +8,7 @@ const ChildProcess = require('child_process');
|
||||
const { ipcRenderer } = require('electron');
|
||||
const { emittedOnce, waitForEvent } = require('./events-helpers');
|
||||
const { resolveGetters } = require('./expect-helpers');
|
||||
const { ifdescribe, delay } = require('./spec-helpers');
|
||||
const { ifit, ifdescribe, delay } = require('./spec-helpers');
|
||||
const features = process._linkedBinding('electron_common_features');
|
||||
|
||||
/* Most of the APIs here don't use standard callbacks */
|
||||
@@ -81,7 +81,8 @@ describe('chromium feature', () => {
|
||||
expect(event.data).to.equal(`size: ${width} ${height}`);
|
||||
});
|
||||
|
||||
it('disables node integration when it is disabled on the parent window', async () => {
|
||||
// FIXME(zcbenz): This test is making the spec runner hang on exit on Windows.
|
||||
ifit(process.platform !== 'win32')('disables node integration when it is disabled on the parent window', async () => {
|
||||
const windowUrl = require('url').format({
|
||||
pathname: `${fixtures}/pages/window-opener-no-node-integration.html`,
|
||||
protocol: 'file',
|
||||
|
||||
Reference in New Issue
Block a user