
content_shell does not use ChromeDriver, so we need a separate implementation for the testdriver.js commands we are adding. This implementation is anchored on Blink's Internals system, which uses the newly-added WebSensorProviderAutomation Mojo interface implemented by content/web_test/browser's WebTestSensorProviderManager to translate the virtual sensor calls into calls to WebContentsSensorProviderProxy that will ultimately reach //services. Bug: 1278377 Change-Id: I13f49d529b36916d1f98b4792839e818fd7e8bdb Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4770865 Commit-Queue: Raphael Kubo Da Costa <raphael.kubo.da.costa@intel.com> Reviewed-by: Matt Reynolds <mattreynolds@chromium.org> Reviewed-by: Kentaro Hara <haraken@chromium.org> Reviewed-by: danakj <danakj@chromium.org> Cr-Commit-Position: refs/heads/main@{#1212214}
100 lines
3.0 KiB
C++
100 lines
3.0 KiB
C++
// Copyright 2023 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "content/web_test/browser/web_test_sensor_provider_manager.h"
|
|
|
|
#include "base/notreached.h"
|
|
#include "content/browser/generic_sensor/web_contents_sensor_provider_proxy.h"
|
|
#include "content/browser/web_contents/web_contents_impl.h"
|
|
#include "content/public/browser/web_contents.h"
|
|
|
|
namespace content {
|
|
|
|
WebTestSensorProviderManager::WebTestSensorProviderManager(
|
|
WebContents* web_contents)
|
|
: web_contents_(static_cast<WebContentsImpl*>(web_contents)->GetWeakPtr()) {
|
|
}
|
|
|
|
WebTestSensorProviderManager::~WebTestSensorProviderManager() = default;
|
|
|
|
void WebTestSensorProviderManager::Bind(
|
|
mojo::PendingReceiver<blink::test::mojom::WebSensorProviderAutomation>
|
|
receiver) {
|
|
receivers_.Add(this, std::move(receiver));
|
|
}
|
|
|
|
void WebTestSensorProviderManager::CreateVirtualSensor(
|
|
device::mojom::SensorType type,
|
|
device::mojom::VirtualSensorMetadataPtr metadata,
|
|
device::mojom::SensorProvider::CreateVirtualSensorCallback callback) {
|
|
if (!web_contents_) {
|
|
return;
|
|
}
|
|
|
|
if (sensor_overrides_.contains(type)) {
|
|
std::move(callback).Run(
|
|
device::mojom::CreateVirtualSensorResult::kSensorTypeAlreadyOverridden);
|
|
return;
|
|
}
|
|
|
|
auto virtual_sensor =
|
|
WebContentsSensorProviderProxy::GetOrCreate(web_contents_.get())
|
|
->CreateVirtualSensorForDevTools(type, std::move(metadata));
|
|
CHECK(virtual_sensor);
|
|
sensor_overrides_[type] = std::move(virtual_sensor);
|
|
|
|
std::move(callback).Run(device::mojom::CreateVirtualSensorResult::kSuccess);
|
|
}
|
|
|
|
void WebTestSensorProviderManager::UpdateVirtualSensor(
|
|
device::mojom::SensorType type,
|
|
const device::SensorReading& reading,
|
|
device::mojom::SensorProvider::UpdateVirtualSensorCallback callback) {
|
|
if (!web_contents_) {
|
|
return;
|
|
}
|
|
|
|
auto it = sensor_overrides_.find(type);
|
|
if (it == sensor_overrides_.end()) {
|
|
std::move(callback).Run(
|
|
device::mojom::UpdateVirtualSensorResult::kSensorTypeNotOverridden);
|
|
return;
|
|
}
|
|
|
|
it->second->UpdateVirtualSensor(std::move(reading), std::move(callback));
|
|
}
|
|
|
|
void WebTestSensorProviderManager::RemoveVirtualSensor(
|
|
device::mojom::SensorType type,
|
|
device::mojom::SensorProvider::RemoveVirtualSensorCallback callback) {
|
|
if (!web_contents_) {
|
|
return;
|
|
}
|
|
|
|
sensor_overrides_.erase(type);
|
|
std::move(callback).Run();
|
|
}
|
|
|
|
void WebTestSensorProviderManager::GetVirtualSensorInformation(
|
|
device::mojom::SensorType type,
|
|
device::mojom::SensorProvider::GetVirtualSensorInformationCallback
|
|
callback) {
|
|
if (!web_contents_) {
|
|
return;
|
|
}
|
|
|
|
auto it = sensor_overrides_.find(type);
|
|
if (it == sensor_overrides_.end()) {
|
|
std::move(callback).Run(
|
|
device::mojom::GetVirtualSensorInformationResult::NewError(
|
|
device::mojom::GetVirtualSensorInformationError::
|
|
kSensorTypeNotOverridden));
|
|
return;
|
|
}
|
|
|
|
it->second->GetVirtualSensorInformation(std::move(callback));
|
|
}
|
|
|
|
} // namespace content
|