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 constant for the lifetime of the frame. When the frame is removed, the id is
not used again. 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_ #### `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_ #### `frame.routingId` _Readonly_

View file

@ -1590,18 +1590,6 @@ base::ProcessId WebContents::GetOSProcessID() const {
return base::GetProcId(process_handle); 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 { WebContents::Type WebContents::GetType() const {
return type_; return type_;
} }
@ -2941,8 +2929,6 @@ v8::Local<v8::ObjectTemplate> WebContents::FillObjectTemplate(
&WebContents::SetBackgroundThrottling) &WebContents::SetBackgroundThrottling)
.SetMethod("getProcessId", &WebContents::GetProcessID) .SetMethod("getProcessId", &WebContents::GetProcessID)
.SetMethod("getOSProcessId", &WebContents::GetOSProcessID) .SetMethod("getOSProcessId", &WebContents::GetOSProcessID)
.SetMethod("_getOSProcessIdForFrame",
&WebContents::GetOSProcessIdForFrame)
.SetMethod("equal", &WebContents::Equal) .SetMethod("equal", &WebContents::Equal)
.SetMethod("_loadURL", &WebContents::LoadURL) .SetMethod("_loadURL", &WebContents::LoadURL)
.SetMethod("downloadURL", &WebContents::DownloadURL) .SetMethod("downloadURL", &WebContents::DownloadURL)

View file

@ -209,8 +209,6 @@ class WebContents : public gin::Wrappable<WebContents>,
void SetBackgroundThrottling(bool allowed); void SetBackgroundThrottling(bool allowed);
int GetProcessID() const; int GetProcessID() const;
base::ProcessId GetOSProcessID() const; base::ProcessId GetOSProcessID() const;
base::ProcessId GetOSProcessIdForFrame(const std::string& name,
const std::string& document_url) const;
Type GetType() const; Type GetType() const;
bool Equal(const WebContents* web_contents) const; bool Equal(const WebContents* web_contents) const;
void LoadURL(const GURL& url, const gin_helper::Dictionary& options); 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(); 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 { int WebFrameMain::ProcessID(v8::Isolate* isolate) const {
if (!CheckRenderFrame()) if (!CheckRenderFrame())
return -1; return -1;
@ -210,6 +224,8 @@ gin::ObjectTemplateBuilder WebFrameMain::GetObjectTemplateBuilder(
.SetMethod("executeJavaScript", &WebFrameMain::ExecuteJavaScript) .SetMethod("executeJavaScript", &WebFrameMain::ExecuteJavaScript)
.SetMethod("reload", &WebFrameMain::Reload) .SetMethod("reload", &WebFrameMain::Reload)
.SetProperty("frameTreeNodeId", &WebFrameMain::FrameTreeNodeID) .SetProperty("frameTreeNodeId", &WebFrameMain::FrameTreeNodeID)
.SetProperty("name", &WebFrameMain::Name)
.SetProperty("osProcessId", &WebFrameMain::OSProcessID)
.SetProperty("processId", &WebFrameMain::ProcessID) .SetProperty("processId", &WebFrameMain::ProcessID)
.SetProperty("routingId", &WebFrameMain::RoutingID) .SetProperty("routingId", &WebFrameMain::RoutingID)
.SetProperty("url", &WebFrameMain::URL) .SetProperty("url", &WebFrameMain::URL)

View file

@ -9,6 +9,7 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "base/process/process.h"
#include "gin/handle.h" #include "gin/handle.h"
#include "gin/wrappable.h" #include "gin/wrappable.h"
@ -68,6 +69,8 @@ class WebFrameMain : public gin::Wrappable<WebFrameMain> {
bool Reload(v8::Isolate* isolate); bool Reload(v8::Isolate* isolate);
int FrameTreeNodeID(v8::Isolate* isolate) const; 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 ProcessID(v8::Isolate* isolate) const;
int RoutingID(v8::Isolate* isolate) const; int RoutingID(v8::Isolate* isolate) const;
GURL URL(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); await w.loadURL(serverUrl);
const pidMain = w.webContents.getOSProcessId(); 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 metrics = app.getAppMetrics();
const isProcessSandboxed = function (pid: number) { const isProcessSandboxed = function (pid: number) {

View file

@ -127,6 +127,8 @@ describe('webFrameMain module', () => {
await w.loadFile(path.join(subframesPath, 'frame.html')); await w.loadFile(path.join(subframesPath, 'frame.html'));
const webFrame = w.webContents.mainFrame; const webFrame = w.webContents.mainFrame;
expect(webFrame).to.haveOwnProperty('frameTreeNodeId'); expect(webFrame).to.haveOwnProperty('frameTreeNodeId');
expect(webFrame).to.haveOwnProperty('name');
expect(webFrame).to.haveOwnProperty('osProcessId');
expect(webFrame).to.haveOwnProperty('processId'); expect(webFrame).to.haveOwnProperty('processId');
expect(webFrame).to.haveOwnProperty('routingId'); expect(webFrame).to.haveOwnProperty('routingId');
}); });