fix: expose all serial devices to setDevicePermissionHandler (#32651)
This commit is contained in:
parent
8e0e2d40e2
commit
365933f1f3
2 changed files with 6 additions and 36 deletions
|
@ -95,36 +95,18 @@ void SerialChooserContext::GrantPortPermission(
|
||||||
const device::mojom::SerialPortInfo& port,
|
const device::mojom::SerialPortInfo& port,
|
||||||
content::RenderFrameHost* render_frame_host) {
|
content::RenderFrameHost* render_frame_host) {
|
||||||
base::Value value = PortInfoToValue(port);
|
base::Value value = PortInfoToValue(port);
|
||||||
port_info_.insert({port.token, value.Clone()});
|
|
||||||
|
|
||||||
if (CanStorePersistentEntry(port)) {
|
|
||||||
auto* web_contents =
|
auto* web_contents =
|
||||||
content::WebContents::FromRenderFrameHost(render_frame_host);
|
content::WebContents::FromRenderFrameHost(render_frame_host);
|
||||||
auto* permission_helper =
|
auto* permission_helper =
|
||||||
WebContentsPermissionHelper::FromWebContents(web_contents);
|
WebContentsPermissionHelper::FromWebContents(web_contents);
|
||||||
permission_helper->GrantSerialPortPermission(origin, std::move(value),
|
permission_helper->GrantSerialPortPermission(origin, std::move(value),
|
||||||
render_frame_host);
|
render_frame_host);
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ephemeral_ports_[origin].insert(port.token);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SerialChooserContext::HasPortPermission(
|
bool SerialChooserContext::HasPortPermission(
|
||||||
const url::Origin& origin,
|
const url::Origin& origin,
|
||||||
const device::mojom::SerialPortInfo& port,
|
const device::mojom::SerialPortInfo& port,
|
||||||
content::RenderFrameHost* render_frame_host) {
|
content::RenderFrameHost* render_frame_host) {
|
||||||
auto it = ephemeral_ports_.find(origin);
|
|
||||||
if (it != ephemeral_ports_.end()) {
|
|
||||||
const std::set<base::UnguessableToken> ports = it->second;
|
|
||||||
if (base::Contains(ports, port.token))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!CanStorePersistentEntry(port)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto* web_contents =
|
auto* web_contents =
|
||||||
content::WebContents::FromRenderFrameHost(render_frame_host);
|
content::WebContents::FromRenderFrameHost(render_frame_host);
|
||||||
auto* permission_helper =
|
auto* permission_helper =
|
||||||
|
@ -194,8 +176,6 @@ void SerialChooserContext::OnPortRemoved(
|
||||||
device::mojom::SerialPortInfoPtr port) {
|
device::mojom::SerialPortInfoPtr port) {
|
||||||
for (auto& observer : port_observer_list_)
|
for (auto& observer : port_observer_list_)
|
||||||
observer.OnPortRemoved(*port);
|
observer.OnPortRemoved(*port);
|
||||||
|
|
||||||
port_info_.erase(port->token);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SerialChooserContext::EnsurePortManagerConnection() {
|
void SerialChooserContext::EnsurePortManagerConnection() {
|
||||||
|
@ -221,10 +201,6 @@ void SerialChooserContext::SetUpPortManagerConnection(
|
||||||
void SerialChooserContext::OnPortManagerConnectionError() {
|
void SerialChooserContext::OnPortManagerConnectionError() {
|
||||||
port_manager_.reset();
|
port_manager_.reset();
|
||||||
client_receiver_.reset();
|
client_receiver_.reset();
|
||||||
|
|
||||||
port_info_.clear();
|
|
||||||
|
|
||||||
ephemeral_ports_.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace electron
|
} // namespace electron
|
||||||
|
|
|
@ -82,12 +82,6 @@ class SerialChooserContext : public KeyedService,
|
||||||
mojo::PendingRemote<device::mojom::SerialPortManager> manager);
|
mojo::PendingRemote<device::mojom::SerialPortManager> manager);
|
||||||
void OnPortManagerConnectionError();
|
void OnPortManagerConnectionError();
|
||||||
|
|
||||||
// Tracks the set of ports to which an origin has access to.
|
|
||||||
std::map<url::Origin, std::set<base::UnguessableToken>> ephemeral_ports_;
|
|
||||||
|
|
||||||
// Holds information about ports in |ephemeral_ports_|.
|
|
||||||
std::map<base::UnguessableToken, base::Value> port_info_;
|
|
||||||
|
|
||||||
mojo::Remote<device::mojom::SerialPortManager> port_manager_;
|
mojo::Remote<device::mojom::SerialPortManager> port_manager_;
|
||||||
mojo::Receiver<device::mojom::SerialPortManagerClient> client_receiver_{this};
|
mojo::Receiver<device::mojom::SerialPortManagerClient> client_receiver_{this};
|
||||||
base::ObserverList<PortObserver> port_observer_list_;
|
base::ObserverList<PortObserver> port_observer_list_;
|
||||||
|
|
Loading…
Add table
Reference in a new issue