feat: add frame to context-menu event params (#30831)

* feat: add frame to context-menu event params

* doc: rephrase frame description
This commit is contained in:
Samuel Maddock 2021-09-21 19:52:49 -04:00 committed by GitHub
parent 52bacd38a9
commit 70c534fd14
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 36 additions and 8 deletions

View file

@ -651,6 +651,7 @@ Returns:
* `params` Object
* `x` Integer - x coordinate.
* `y` Integer - y coordinate.
* `frame` WebFrameMain - Frame from which the context menu was invoked.
* `linkURL` String - URL of the link that encloses the node the context menu
was invoked on.
* `linkText` String - Text associated with the link. May be an empty

View file

@ -1287,7 +1287,7 @@ void WebContents::RendererResponsive(
bool WebContents::HandleContextMenu(content::RenderFrameHost* render_frame_host,
const content::ContextMenuParams& params) {
Emit("context-menu", std::make_pair(params, web_contents()));
Emit("context-menu", std::make_pair(params, render_frame_host));
return true;
}

View file

@ -13,6 +13,7 @@
#include "shell/browser/web_contents_permission_helper.h"
#include "shell/common/gin_converters/blink_converter.h"
#include "shell/common/gin_converters/callback_converter.h"
#include "shell/common/gin_converters/frame_converter.h"
#include "shell/common/gin_converters/gfx_converter.h"
#include "shell/common/gin_converters/gurl_converter.h"
#include "shell/common/gin_helper/dictionary.h"
@ -73,11 +74,13 @@ v8::Local<v8::Value> Converter<blink::mojom::MenuItem::Type>::ToV8(
}
// static
v8::Local<v8::Value> Converter<ContextMenuParamsWithWebContents>::ToV8(
v8::Local<v8::Value> Converter<ContextMenuParamsWithRenderFrameHost>::ToV8(
v8::Isolate* isolate,
const ContextMenuParamsWithWebContents& val) {
const ContextMenuParamsWithRenderFrameHost& val) {
const auto& params = val.first;
content::RenderFrameHost* render_frame_host = val.second;
gin_helper::Dictionary dict = gin::Dictionary::CreateEmpty(isolate);
dict.SetGetter("frame", render_frame_host);
dict.Set("x", params.x);
dict.Set("y", params.y);
dict.Set("linkURL", params.link_url);

View file

@ -17,11 +17,12 @@
namespace content {
struct ContextMenuParams;
struct NativeWebKeyboardEvent;
class RenderFrameHost;
class WebContents;
} // namespace content
using ContextMenuParamsWithWebContents =
std::pair<content::ContextMenuParams, content::WebContents*>;
using ContextMenuParamsWithRenderFrameHost =
std::pair<content::ContextMenuParams, content::RenderFrameHost*>;
namespace gin {
@ -32,9 +33,10 @@ struct Converter<blink::mojom::MenuItem::Type> {
};
template <>
struct Converter<ContextMenuParamsWithWebContents> {
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
const ContextMenuParamsWithWebContents& val);
struct Converter<ContextMenuParamsWithRenderFrameHost> {
static v8::Local<v8::Value> ToV8(
v8::Isolate* isolate,
const ContextMenuParamsWithRenderFrameHost& val);
};
template <>

View file

@ -2056,6 +2056,28 @@ describe('webContents module', () => {
});
});
describe('context-menu event', () => {
afterEach(closeAllWindows);
it('emits when right-clicked in page', async () => {
const w = new BrowserWindow({ show: false });
await w.loadFile(path.join(fixturesPath, 'pages', 'base-page.html'));
const promise = emittedOnce(w.webContents, 'context-menu');
// Simulate right-click to create context-menu event.
const opts = { x: 0, y: 0, button: 'right' as any };
w.webContents.sendInputEvent({ ...opts, type: 'mouseDown' });
w.webContents.sendInputEvent({ ...opts, type: 'mouseUp' });
const [, params] = await promise;
expect(params.pageURL).to.equal(w.webContents.getURL());
expect(params.frame).to.be.an('object');
expect(params.x).to.be.a('number');
expect(params.y).to.be.a('number');
});
});
it('emits a cancelable event before creating a child webcontents', async () => {
const w = new BrowserWindow({
show: false,