#include <memory>
#include <string>
#include <string_view>
#include <utility>
#include "base/functional/bind.h"
#include "base/memory/ref_counted.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/scoped_feature_list.h"
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chrome_content_browser_client.h"
#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
#include "chrome/browser/device_notifications/device_pinned_notification_renderer.h"
#include "chrome/browser/device_notifications/device_status_icon_renderer.h"
#include "chrome/browser/notifications/notification_display_service_tester.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.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/browser/ui/web_applications/test/isolated_web_app_test_utils.h"
#include "chrome/browser/usb/chrome_usb_delegate.h"
#include "chrome/browser/usb/usb_browser_test_utils.h"
#include "chrome/browser/usb/usb_chooser_context.h"
#include "chrome/browser/usb/usb_chooser_context_factory.h"
#include "chrome/browser/usb/usb_chooser_controller.h"
#include "chrome/browser/usb/usb_pinned_notification.h"
#include "chrome/browser/usb/usb_status_icon.h"
#include "chrome/browser/usb/web_usb_chooser.h"
#include "chrome/browser/usb/web_usb_histograms.h"
#include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_url_info.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "components/content_settings/core/browser/host_content_settings_map.h"
#include "components/prefs/pref_service.h"
#include "content/public/browser/console_message.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/service_worker_context.h"
#include "content/public/browser/service_worker_context_observer.h"
#include "content/public/browser/service_worker_running_info.h"
#include "content/public/browser/storage_partition.h"
#include "content/public/browser/usb_chooser.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/browser_test.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/service_worker_test_helpers.h"
#include "content/public/test/test_navigation_observer.h"
#include "extensions/buildflags/buildflags.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/device/public/cpp/test/fake_usb_device_manager.h"
#include "services/device/public/mojom/usb_device.mojom.h"
#include "services/device/public/mojom/usb_enumeration_options.mojom.h"
#include "services/service_manager/public/cpp/binder_registry.h"
#include "third_party/blink/public/mojom/usb/web_usb_service.mojom.h"
#if BUILDFLAG(ENABLE_EXTENSIONS)
#include "base/test/test_future.h"
#include "base/test/values_test_util.h"
#include "chrome/browser/extensions/extension_browsertest.h"
#include "chrome/common/chrome_features.h"
#include "components/content_settings/core/common/pref_names.h"
#include "extensions/common/extension.h"
#include "extensions/test/extension_test_message_listener.h"
#include "extensions/test/result_catcher.h"
#include "extensions/test/test_extension_dir.h"
#if BUILDFLAG(IS_CHROMEOS_ASH)
#include "chrome/browser/ash/login/users/fake_chrome_user_manager.h"
#include "components/account_id/account_id.h"
#include "components/user_manager/scoped_user_manager.h"
#endif
#endif
namespace {
TestFuture;
JsReplace;
Extension;
ExtensionId;
TestExtensionDir;
Return;
const char kTestExtensionId[] = …;
constexpr const char kTestExtensionKey[] = …;
constexpr uint8_t kUsbPrinterClass = …;
constexpr char kNonAppHost[] = …;
constexpr char kNonAppHost2[] = …;
constexpr char OpenAndClaimDeviceScript[] = …;
MATCHER_P(FailedWithSubstr, substr, "") { … }
#if BUILDFLAG(ENABLE_EXTENSIONS) && BUILDFLAG(IS_CHROMEOS_ASH)
const AccountId kManagedUserAccountId =
AccountId::FromUserEmail("[email protected]");
#endif
class TestServiceWorkerContextObserver
: public content::ServiceWorkerContextObserver { … };
class TestServiceWorkerConsoleObserver
: public content::ServiceWorkerContextObserver { … };
class ChromeWebUsbTest : public InProcessBrowserTest { … };
scoped_refptr<device::FakeUsbDeviceInfo> CreateUsbDevice(
uint8_t class_code,
uint16_t product_id = 0x8765) { … }
IN_PROC_BROWSER_TEST_F(ChromeWebUsbTest, RequestAndGetDevices) { … }
IN_PROC_BROWSER_TEST_F(ChromeWebUsbTest, RequestDeviceWithGuardBlocked) { … }
IN_PROC_BROWSER_TEST_F(ChromeWebUsbTest, AddRemoveDevice) { … }
IN_PROC_BROWSER_TEST_F(ChromeWebUsbTest, AddRemoveDeviceEphemeral) { … }
IN_PROC_BROWSER_TEST_F(ChromeWebUsbTest, NavigateWithChooserCrossOrigin) { … }
IN_PROC_BROWSER_TEST_F(ChromeWebUsbTest, ShowChooserInBackgroundTab) { … }
IN_PROC_BROWSER_TEST_F(ChromeWebUsbTest, ForgetDevice) { … }
#if BUILDFLAG(ENABLE_EXTENSIONS)
class ChromeWebUsbAppTest : public extensions::ExtensionBrowserTest { … };
IN_PROC_BROWSER_TEST_F(ChromeWebUsbAppTest, AllowProtectedInterfaces) { … }
#endif
class IsolatedWebAppUsbBrowserTest
: public web_app::IsolatedWebAppBrowserTestHarness { … };
IN_PROC_BROWSER_TEST_F(IsolatedWebAppUsbBrowserTest, ClaimInterface) { … }
class IsolatedWebAppPermissionsPolicyBrowserTest
: public IsolatedWebAppUsbBrowserTest { … };
IN_PROC_BROWSER_TEST_F(IsolatedWebAppPermissionsPolicyBrowserTest,
PermissionsPolicy_Iframe_NoAllowAttribute) { … }
IN_PROC_BROWSER_TEST_F(IsolatedWebAppPermissionsPolicyBrowserTest,
PermissionsPolicy_Iframe_Self) { … }
IN_PROC_BROWSER_TEST_F(IsolatedWebAppPermissionsPolicyBrowserTest,
PermissionsPolicy_Iframe_Src) { … }
IN_PROC_BROWSER_TEST_F(IsolatedWebAppPermissionsPolicyBrowserTest,
PermissionsPolicy_Iframe_None) { … }
IN_PROC_BROWSER_TEST_F(IsolatedWebAppPermissionsPolicyBrowserTest,
PermissionsPolicy_Iframe_CrossOrigin) { … }
IN_PROC_BROWSER_TEST_F(IsolatedWebAppPermissionsPolicyBrowserTest,
PermissionsPolicy_Headers_None) { … }
IN_PROC_BROWSER_TEST_F(IsolatedWebAppPermissionsPolicyBrowserTest,
PermissionsPolicy_Headers_Self) { … }
IN_PROC_BROWSER_TEST_F(IsolatedWebAppPermissionsPolicyBrowserTest,
PermissionsPolicy_Headers_All) { … }
IN_PROC_BROWSER_TEST_F(IsolatedWebAppPermissionsPolicyBrowserTest,
PermissionsPolicy_Usb_Unrestricted_CrossOrigin_Iframe) { … }
IN_PROC_BROWSER_TEST_F(IsolatedWebAppPermissionsPolicyBrowserTest,
PermissionsPolicy_Usb_Unrestricted_Iframe) { … }
#if BUILDFLAG(ENABLE_EXTENSIONS)
class WebUsbExtensionBrowserTest : public extensions::ExtensionBrowserTest { … };
class WebUsbExtensionFeatureDisabledBrowserTest
: public WebUsbExtensionBrowserTest { … };
#if !BUILDFLAG(IS_MAC) && defined(NDEBUG)
#define MAYBE_FeatureDisabled …
#else
#define MAYBE_FeatureDisabled …
#endif
IN_PROC_BROWSER_TEST_F(WebUsbExtensionFeatureDisabledBrowserTest,
MAYBE_FeatureDisabled) { … }
#if !BUILDFLAG(IS_MAC) && defined(NDEBUG)
#define MAYBE_GetDevices …
#else
#define MAYBE_GetDevices …
#endif
IN_PROC_BROWSER_TEST_F(WebUsbExtensionBrowserTest, MAYBE_GetDevices) { … }
#if !BUILDFLAG(IS_MAC) && defined(NDEBUG)
#define MAYBE_RequestDevice …
#else
#define MAYBE_RequestDevice …
#endif
IN_PROC_BROWSER_TEST_F(WebUsbExtensionBrowserTest, MAYBE_RequestDevice) { … }
#if !BUILDFLAG(IS_MAC) && defined(NDEBUG)
#define MAYBE_UsbConnectionTracker …
#else
#define MAYBE_UsbConnectionTracker …
#endif
IN_PROC_BROWSER_TEST_F(WebUsbExtensionBrowserTest, MAYBE_UsbConnectionTracker) { … }
#if !BUILDFLAG(IS_MAC) && defined(NDEBUG)
#define MAYBE_DeviceConnectAndOpenDeviceWhenServiceWorkerStopped …
#else
#define MAYBE_DeviceConnectAndOpenDeviceWhenServiceWorkerStopped …
#endif
IN_PROC_BROWSER_TEST_F(
WebUsbExtensionBrowserTest,
MAYBE_DeviceConnectAndOpenDeviceWhenServiceWorkerStopped) { … }
#if !BUILDFLAG(IS_MAC) && defined(NDEBUG)
#define MAYBE_EventListenerAddedAfterServiceWorkerIsActivated …
#else
#define MAYBE_EventListenerAddedAfterServiceWorkerIsActivated …
#endif
IN_PROC_BROWSER_TEST_F(WebUsbExtensionBrowserTest,
MAYBE_EventListenerAddedAfterServiceWorkerIsActivated) { … }
#endif
}