#include <optional>
#include "base/command_line.h"
#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "base/metrics/field_trial.h"
#include "base/metrics/field_trial_params.h"
#include "base/run_loop.h"
#include "base/strings/utf_string_conversions.h"
#include "base/task/single_thread_task_runner.h"
#include "base/test/scoped_feature_list.h"
#include "base/test/with_feature_override.h"
#include "chrome/browser/bluetooth/bluetooth_chooser_context_factory.h"
#include "chrome/browser/bluetooth/chrome_bluetooth_delegate_impl_client.h"
#include "chrome/browser/chrome_content_browser_client.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_dialogs.h"
#include "chrome/browser/ui/chooser_bubble_testapi.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "components/permissions/bluetooth_delegate_impl.h"
#include "components/permissions/contexts/bluetooth_chooser_context.h"
#include "components/permissions/permission_context_base.h"
#include "components/variations/variations_associated_data.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/common/content_client.h"
#include "content/public/common/content_features.h"
#include "content/public/common/content_switches.h"
#include "content/public/test/bluetooth_test_utils.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/browser_test_base.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/content_mock_cert_verifier.h"
#include "content/public/test/prerender_test_util.h"
#include "content/public/test/test_navigation_observer.h"
#include "content/public/test/test_utils.h"
#include "content/public/test/url_loader_interceptor.h"
#include "device/bluetooth/bluetooth_adapter.h"
#include "device/bluetooth/bluetooth_adapter_factory.h"
#include "device/bluetooth/bluetooth_device.h"
#include "device/bluetooth/bluetooth_gatt_characteristic.h"
#include "device/bluetooth/bluetooth_gatt_connection.h"
#include "device/bluetooth/bluetooth_gatt_notify_session.h"
#include "device/bluetooth/bluetooth_remote_gatt_characteristic.h"
#include "device/bluetooth/bluetooth_remote_gatt_service.h"
#include "device/bluetooth/public/cpp/bluetooth_uuid.h"
#include "device/bluetooth/test/mock_bluetooth_adapter.h"
#include "device/bluetooth/test/mock_bluetooth_device.h"
#include "device/bluetooth/test/mock_bluetooth_gatt_connection.h"
#include "device/bluetooth/test/mock_bluetooth_gatt_notify_session.h"
#include "device/bluetooth/test/mock_bluetooth_gatt_service.h"
#include "net/dns/mock_host_resolver.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/common/bluetooth/web_bluetooth_device_id.h"
namespace {
BluetoothAdapter;
BluetoothGattCharacteristic;
BluetoothGattNotifySession;
BluetoothGattService;
BluetoothRemoteGattCharacteristic;
BluetoothRemoteGattService;
BluetoothUUID;
MockBluetoothGattCharacteristic;
MockBluetoothGattNotifySession;
MockBluetoothGattService;
constexpr char kDeviceAddress[] = …;
constexpr char kDeviceAddress2[] = …;
constexpr char kHeartRateUUIDString[] = …;
constexpr char kHeartRateMeasurementUUIDString[] = …;
const device::BluetoothUUID kHeartRateUUID(kHeartRateUUIDString);
const device::BluetoothUUID kHeartRateMeasurementUUID(
kHeartRateMeasurementUUIDString);
constexpr char kExampleUrl[] = …;
class FakeBluetoothAdapter
: public testing::NiceMock<device::MockBluetoothAdapter> { … };
class FakeBluetoothGattCharacteristic
: public testing::NiceMock<MockBluetoothGattCharacteristic> { … };
class FakeBluetoothGattConnection
: public testing::NiceMock<device::MockBluetoothGattConnection> { … };
class FakeBluetoothDevice
: public testing::NiceMock<device::MockBluetoothDevice> { … };
class FakeBluetoothChooser : public content::BluetoothChooser { … };
class TestBluetoothDelegate : public permissions::BluetoothDelegateImpl { … };
class TestContentBrowserClient : public ChromeContentBrowserClient { … };
class WebBluetoothTest : public InProcessBrowserTest { … };
IN_PROC_BROWSER_TEST_F(WebBluetoothTest, WebBluetoothAfterCrash) { … }
IN_PROC_BROWSER_TEST_F(WebBluetoothTest, KillSwitchShouldBlock) { … }
IN_PROC_BROWSER_TEST_F(WebBluetoothTest, BlocklistShouldBlock) { … }
IN_PROC_BROWSER_TEST_F(WebBluetoothTest, NavigateWithChooserCrossOrigin) { … }
IN_PROC_BROWSER_TEST_F(WebBluetoothTest, ShowChooserInBackgroundTab) { … }
IN_PROC_BROWSER_TEST_F(WebBluetoothTest, NotificationStartValueChangeRead) { … }
IN_PROC_BROWSER_TEST_F(WebBluetoothTest, NotificationStartValueChangeNotify) { … }
class WebBluetoothPermissionsPolicyTest
: public base::test::WithFeatureOverride,
public WebBluetoothTest { … };
INSTANTIATE_FEATURE_OVERRIDE_TEST_SUITE(…);
IN_PROC_BROWSER_TEST_P(WebBluetoothPermissionsPolicyTest,
ThrowSecurityWhenIFrameIsDisallowed) { … }
IN_PROC_BROWSER_TEST_P(WebBluetoothPermissionsPolicyTest,
AllowedChildFrameShouldHaveAccessToParentDevices) { … }
IN_PROC_BROWSER_TEST_P(WebBluetoothPermissionsPolicyTest,
ParentShouldHaveAccessToAllowedChildFrameDevices) { … }
class WebBluetoothTestWithNewPermissionsBackendEnabled
: public WebBluetoothTest { … };
IN_PROC_BROWSER_TEST_F(WebBluetoothTestWithNewPermissionsBackendEnabled,
PRE_WebBluetoothPersistentIds) { … }
IN_PROC_BROWSER_TEST_F(WebBluetoothTestWithNewPermissionsBackendEnabled,
WebBluetoothPersistentIds) { … }
IN_PROC_BROWSER_TEST_F(WebBluetoothTestWithNewPermissionsBackendEnabled,
PRE_WebBluetoothScanningIdsNotPersistent) { … }
IN_PROC_BROWSER_TEST_F(WebBluetoothTestWithNewPermissionsBackendEnabled,
WebBluetoothScanningIdsNotPersistent) { … }
IN_PROC_BROWSER_TEST_F(WebBluetoothTestWithNewPermissionsBackendEnabled,
PRE_WebBluetoothIdsUsedInWebBluetoothScanning) { … }
IN_PROC_BROWSER_TEST_F(WebBluetoothTestWithNewPermissionsBackendEnabled,
WebBluetoothIdsUsedInWebBluetoothScanning) { … }
IN_PROC_BROWSER_TEST_F(WebBluetoothTestWithNewPermissionsBackendEnabled,
PRE_WebBluetoothPersistentServices) { … }
IN_PROC_BROWSER_TEST_F(WebBluetoothTestWithNewPermissionsBackendEnabled,
WebBluetoothPersistentServices) { … }
IN_PROC_BROWSER_TEST_F(WebBluetoothTestWithNewPermissionsBackendEnabled,
RevokingPermissionDisconnectsTheDevice) { … }
IN_PROC_BROWSER_TEST_F(WebBluetoothTestWithNewPermissionsBackendEnabled,
RevokingPermissionStopsAdvertisements) { … }
class WebBluetoothTestWithNewPermissionsBackendEnabledInPrerendering
: public WebBluetoothTestWithNewPermissionsBackendEnabled { … };
class TestWebContentsObserver : public content::WebContentsObserver { … };
IN_PROC_BROWSER_TEST_F(
WebBluetoothTestWithNewPermissionsBackendEnabledInPrerendering,
WebBluetoothDeviceConnectInPrerendering) { … }
}