feat: add osProcessId / name properties to webFrameMain (#26093)
* feat: add osProcessId / name properties to webFrameMain * Update docs/api/web-frame-main.md Co-authored-by: Jeremy Rose <jeremya@chromium.org> Co-authored-by: Jeremy Rose <jeremya@chromium.org>
This commit is contained in:
parent
30b5e15ddc
commit
aa157c3f05
7 changed files with 32 additions and 18 deletions
|
@ -122,9 +122,18 @@ content. The identifier is fixed at the creation of the frame and stays
|
|||
constant for the lifetime of the frame. When the frame is removed, the id is
|
||||
not used again.
|
||||
|
||||
#### `frame.name` _Readonly_
|
||||
|
||||
A `String` representing the frame name.
|
||||
|
||||
#### `frame.osProcessId` _Readonly_
|
||||
|
||||
An `Integer` representing the operating system `pid` of the process which owns this frame.
|
||||
|
||||
#### `frame.processId` _Readonly_
|
||||
|
||||
An `Integer` representing the id of the process which owns this frame.
|
||||
An `Integer` representing the Chromium internal `pid` of the process which owns this frame.
|
||||
This is not the same as the OS process ID; to read that use `frame.osProcessId`.
|
||||
|
||||
#### `frame.routingId` _Readonly_
|
||||
|
||||
|
|
|
@ -1590,18 +1590,6 @@ base::ProcessId WebContents::GetOSProcessID() const {
|
|||
return base::GetProcId(process_handle);
|
||||
}
|
||||
|
||||
base::ProcessId WebContents::GetOSProcessIdForFrame(
|
||||
const std::string& name,
|
||||
const std::string& document_url) const {
|
||||
for (auto* frame : web_contents()->GetAllFrames()) {
|
||||
if (frame->GetFrameName() == name &&
|
||||
frame->GetLastCommittedURL().spec() == document_url) {
|
||||
return base::GetProcId(frame->GetProcess()->GetProcess().Handle());
|
||||
}
|
||||
}
|
||||
return base::kNullProcessId;
|
||||
}
|
||||
|
||||
WebContents::Type WebContents::GetType() const {
|
||||
return type_;
|
||||
}
|
||||
|
@ -2941,8 +2929,6 @@ v8::Local<v8::ObjectTemplate> WebContents::FillObjectTemplate(
|
|||
&WebContents::SetBackgroundThrottling)
|
||||
.SetMethod("getProcessId", &WebContents::GetProcessID)
|
||||
.SetMethod("getOSProcessId", &WebContents::GetOSProcessID)
|
||||
.SetMethod("_getOSProcessIdForFrame",
|
||||
&WebContents::GetOSProcessIdForFrame)
|
||||
.SetMethod("equal", &WebContents::Equal)
|
||||
.SetMethod("_loadURL", &WebContents::LoadURL)
|
||||
.SetMethod("downloadURL", &WebContents::DownloadURL)
|
||||
|
|
|
@ -209,8 +209,6 @@ class WebContents : public gin::Wrappable<WebContents>,
|
|||
void SetBackgroundThrottling(bool allowed);
|
||||
int GetProcessID() const;
|
||||
base::ProcessId GetOSProcessID() const;
|
||||
base::ProcessId GetOSProcessIdForFrame(const std::string& name,
|
||||
const std::string& document_url) const;
|
||||
Type GetType() const;
|
||||
bool Equal(const WebContents* web_contents) const;
|
||||
void LoadURL(const GURL& url, const gin_helper::Dictionary& options);
|
||||
|
|
|
@ -120,6 +120,20 @@ int WebFrameMain::FrameTreeNodeID(v8::Isolate* isolate) const {
|
|||
return render_frame_->GetFrameTreeNodeId();
|
||||
}
|
||||
|
||||
std::string WebFrameMain::Name(v8::Isolate* isolate) const {
|
||||
if (!CheckRenderFrame())
|
||||
return std::string();
|
||||
return render_frame_->GetFrameName();
|
||||
}
|
||||
|
||||
base::ProcessId WebFrameMain::OSProcessID(v8::Isolate* isolate) const {
|
||||
if (!CheckRenderFrame())
|
||||
return -1;
|
||||
base::ProcessHandle process_handle =
|
||||
render_frame_->GetProcess()->GetProcess().Handle();
|
||||
return base::GetProcId(process_handle);
|
||||
}
|
||||
|
||||
int WebFrameMain::ProcessID(v8::Isolate* isolate) const {
|
||||
if (!CheckRenderFrame())
|
||||
return -1;
|
||||
|
@ -210,6 +224,8 @@ gin::ObjectTemplateBuilder WebFrameMain::GetObjectTemplateBuilder(
|
|||
.SetMethod("executeJavaScript", &WebFrameMain::ExecuteJavaScript)
|
||||
.SetMethod("reload", &WebFrameMain::Reload)
|
||||
.SetProperty("frameTreeNodeId", &WebFrameMain::FrameTreeNodeID)
|
||||
.SetProperty("name", &WebFrameMain::Name)
|
||||
.SetProperty("osProcessId", &WebFrameMain::OSProcessID)
|
||||
.SetProperty("processId", &WebFrameMain::ProcessID)
|
||||
.SetProperty("routingId", &WebFrameMain::RoutingID)
|
||||
.SetProperty("url", &WebFrameMain::URL)
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "base/process/process.h"
|
||||
#include "gin/handle.h"
|
||||
#include "gin/wrappable.h"
|
||||
|
||||
|
@ -68,6 +69,8 @@ class WebFrameMain : public gin::Wrappable<WebFrameMain> {
|
|||
bool Reload(v8::Isolate* isolate);
|
||||
|
||||
int FrameTreeNodeID(v8::Isolate* isolate) const;
|
||||
std::string Name(v8::Isolate* isolate) const;
|
||||
base::ProcessId OSProcessID(v8::Isolate* isolate) const;
|
||||
int ProcessID(v8::Isolate* isolate) const;
|
||||
int RoutingID(v8::Isolate* isolate) const;
|
||||
GURL URL(v8::Isolate* isolate) const;
|
||||
|
|
|
@ -216,7 +216,7 @@ ifdescribe(process.platform !== 'linux')('cross-site frame sandboxing', () => {
|
|||
await w.loadURL(serverUrl);
|
||||
|
||||
const pidMain = w.webContents.getOSProcessId();
|
||||
const pidFrame = (w.webContents as any)._getOSProcessIdForFrame('frame', crossSiteUrl);
|
||||
const pidFrame = w.webContents.mainFrame.frames.find(f => f.name === 'frame')!.osProcessId;
|
||||
|
||||
const metrics = app.getAppMetrics();
|
||||
const isProcessSandboxed = function (pid: number) {
|
||||
|
|
|
@ -127,6 +127,8 @@ describe('webFrameMain module', () => {
|
|||
await w.loadFile(path.join(subframesPath, 'frame.html'));
|
||||
const webFrame = w.webContents.mainFrame;
|
||||
expect(webFrame).to.haveOwnProperty('frameTreeNodeId');
|
||||
expect(webFrame).to.haveOwnProperty('name');
|
||||
expect(webFrame).to.haveOwnProperty('osProcessId');
|
||||
expect(webFrame).to.haveOwnProperty('processId');
|
||||
expect(webFrame).to.haveOwnProperty('routingId');
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue