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:
Milan Burda 2020-10-26 04:03:34 +01:00 committed by GitHub
parent 30b5e15ddc
commit aa157c3f05
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 32 additions and 18 deletions

View file

@ -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_

View file

@ -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)

View file

@ -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);

View file

@ -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)

View file

@ -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;

View file

@ -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) {

View file

@ -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');
});