From 9791d5e7cb770457541f35c38a16d7469a479dec Mon Sep 17 00:00:00 2001 From: Ashutosh Singhal Date: Fri, 10 May 2024 16:58:26 +0000 Subject: [PATCH] Introduce DeviceAttributeAPI class for better test coverage Replacing the device_attributes_api static methods and replacing it with the DeviceAttributesAPI class. Bug: b/333069979 Change-Id: I3123a5164f5f0a7171bd5171e49307508d73e4e7 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5522575 Reviewed-by: Jeroen Dhollander Reviewed-by: Sergii Bykov Commit-Queue: Ashutosh Singhal Cr-Commit-Position: refs/heads/main@{#1299318} --- .../device_api/device_attribute_api.cc | 24 +-- .../browser/device_api/device_attribute_api.h | 63 +++++-- .../device_attribute_api_browsertest.cc | 26 +-- .../browser/device_api/device_service_impl.cc | 51 ++++-- .../browser/device_api/device_service_impl.h | 19 ++- .../device_api/device_service_unittest.cc | 160 +++++++++++++++--- 6 files changed, 267 insertions(+), 76 deletions(-) diff --git a/chrome/browser/device_api/device_attribute_api.cc b/chrome/browser/device_api/device_attribute_api.cc index 7c12e06ed7afd9..cb7556265febf1 100644 --- a/chrome/browser/device_api/device_attribute_api.cc +++ b/chrome/browser/device_api/device_attribute_api.cc @@ -25,8 +25,6 @@ using blink::mojom::DeviceAPIService; using blink::mojom::DeviceAttributeResultPtr; -namespace device_attribute_api { - namespace { using Result = blink::mojom::DeviceAttributeResult; @@ -61,18 +59,22 @@ void AdaptLacrosResult( } // namespace -void ReportNotAffiliatedError( +DeviceAttributeApiImpl::DeviceAttributeApiImpl() = default; +DeviceAttributeApiImpl::~DeviceAttributeApiImpl() = default; + +void DeviceAttributeApiImpl::ReportNotAffiliatedError( base::OnceCallback callback) { std::move(callback).Run(Result::NewErrorMessage(kNotAffiliatedErrorMessage)); } -void ReportNotAllowedError( +void DeviceAttributeApiImpl::ReportNotAllowedError( base::OnceCallback callback) { std::move(callback).Run( Result::NewErrorMessage(kNotAllowedOriginErrorMessage)); } -void GetDirectoryId(DeviceAPIService::GetDirectoryIdCallback callback) { +void DeviceAttributeApiImpl::GetDirectoryId( + DeviceAPIService::GetDirectoryIdCallback callback) { #if BUILDFLAG(IS_CHROMEOS_ASH) const std::string attribute = g_browser_process->platform_part() ->browser_policy_connector_ash() @@ -94,7 +96,8 @@ void GetDirectoryId(DeviceAPIService::GetDirectoryIdCallback callback) { #endif } -void GetHostname(DeviceAPIService::GetHostnameCallback callback) { +void DeviceAttributeApiImpl::GetHostname( + DeviceAPIService::GetHostnameCallback callback) { #if BUILDFLAG(IS_CHROMEOS_ASH) const std::optional attribute = g_browser_process->platform_part() @@ -114,7 +117,8 @@ void GetHostname(DeviceAPIService::GetHostnameCallback callback) { #endif } -void GetSerialNumber(DeviceAPIService::GetSerialNumberCallback callback) { +void DeviceAttributeApiImpl::GetSerialNumber( + DeviceAPIService::GetSerialNumberCallback callback) { #if BUILDFLAG(IS_CHROMEOS_ASH) const std::optional attribute = ash::system::StatisticsProvider::GetInstance()->GetMachineID(); @@ -134,7 +138,7 @@ void GetSerialNumber(DeviceAPIService::GetSerialNumberCallback callback) { #endif } -void GetAnnotatedAssetId( +void DeviceAttributeApiImpl::GetAnnotatedAssetId( DeviceAPIService::GetAnnotatedAssetIdCallback callback) { #if BUILDFLAG(IS_CHROMEOS_ASH) const std::string attribute = g_browser_process->platform_part() @@ -157,7 +161,7 @@ void GetAnnotatedAssetId( #endif } -void GetAnnotatedLocation( +void DeviceAttributeApiImpl::GetAnnotatedLocation( DeviceAPIService::GetAnnotatedLocationCallback callback) { #if BUILDFLAG(IS_CHROMEOS_ASH) const std::string attribute = g_browser_process->platform_part() @@ -179,5 +183,3 @@ void GetAnnotatedLocation( Result::NewErrorMessage(kNotSupportedPlatformErrorMessage)); #endif } - -} // namespace device_attribute_api diff --git a/chrome/browser/device_api/device_attribute_api.h b/chrome/browser/device_api/device_attribute_api.h index b4160f73effa47..30793768360a7d 100644 --- a/chrome/browser/device_api/device_attribute_api.h +++ b/chrome/browser/device_api/device_attribute_api.h @@ -8,22 +8,55 @@ #include "base/functional/callback_forward.h" #include "third_party/blink/public/mojom/device/device.mojom.h" -namespace device_attribute_api { +class DeviceAttributeApi { + public: + DeviceAttributeApi() = default; + DeviceAttributeApi(const DeviceAttributeApi&) = delete; + DeviceAttributeApi& operator=(const DeviceAttributeApi&) = delete; + virtual ~DeviceAttributeApi() = default; -void ReportNotAffiliatedError( - base::OnceCallback callback); -void ReportNotAllowedError( - base::OnceCallback callback); -void GetDirectoryId( - blink::mojom::DeviceAPIService::GetDirectoryIdCallback callback); -void GetHostname(blink::mojom::DeviceAPIService::GetHostnameCallback callback); -void GetSerialNumber( - blink::mojom::DeviceAPIService::GetSerialNumberCallback callback); -void GetAnnotatedAssetId( - blink::mojom::DeviceAPIService::GetAnnotatedAssetIdCallback callback); -void GetAnnotatedLocation( - blink::mojom::DeviceAPIService::GetAnnotatedLocationCallback callback); + virtual void ReportNotAffiliatedError( + base::OnceCallback + callback) = 0; + virtual void ReportNotAllowedError( + base::OnceCallback + callback) = 0; + virtual void GetDirectoryId( + blink::mojom::DeviceAPIService::GetDirectoryIdCallback callback) = 0; + virtual void GetHostname( + blink::mojom::DeviceAPIService::GetHostnameCallback callback) = 0; + virtual void GetSerialNumber( + blink::mojom::DeviceAPIService::GetSerialNumberCallback callback) = 0; + virtual void GetAnnotatedAssetId( + blink::mojom::DeviceAPIService::GetAnnotatedAssetIdCallback callback) = 0; + virtual void GetAnnotatedLocation( + blink::mojom::DeviceAPIService::GetAnnotatedLocationCallback + callback) = 0; +}; -} // namespace device_attribute_api +class DeviceAttributeApiImpl : public DeviceAttributeApi { + public: + DeviceAttributeApiImpl(); + ~DeviceAttributeApiImpl() override; + + void ReportNotAffiliatedError( + base::OnceCallback callback) + override; + void ReportNotAllowedError( + base::OnceCallback callback) + override; + void GetDirectoryId( + blink::mojom::DeviceAPIService::GetDirectoryIdCallback callback) override; + void GetHostname( + blink::mojom::DeviceAPIService::GetHostnameCallback callback) override; + void GetSerialNumber(blink::mojom::DeviceAPIService::GetSerialNumberCallback + callback) override; + void GetAnnotatedAssetId( + blink::mojom::DeviceAPIService::GetAnnotatedAssetIdCallback callback) + override; + void GetAnnotatedLocation( + blink::mojom::DeviceAPIService::GetAnnotatedLocationCallback callback) + override; +}; #endif // CHROME_BROWSER_DEVICE_API_DEVICE_ATTRIBUTE_API_H_ diff --git a/chrome/browser/device_api/device_attribute_api_browsertest.cc b/chrome/browser/device_api/device_attribute_api_browsertest.cc index 4345d6c3937918..dd908bb857199d 100644 --- a/chrome/browser/device_api/device_attribute_api_browsertest.cc +++ b/chrome/browser/device_api/device_attribute_api_browsertest.cc @@ -32,26 +32,29 @@ class DeviceAttributeAPIUnsetTest : public policy::DevicePolicyCrosBrowserTest { std::string()); } + DeviceAttributeApi& device_attributes_api() { return device_attributes_api_; } + private: ash::system::ScopedFakeStatisticsProvider fake_statistics_provider_; + DeviceAttributeApiImpl device_attributes_api_; }; IN_PROC_BROWSER_TEST_F(DeviceAttributeAPIUnsetTest, AllAttributes) { base::test::TestFuture future; - device_attribute_api::GetDirectoryId(future.GetRepeatingCallback()); + device_attributes_api().GetDirectoryId(future.GetCallback()); EXPECT_FALSE(future.Take()->get_attribute().has_value()); - device_attribute_api::GetAnnotatedAssetId(future.GetRepeatingCallback()); + device_attributes_api().GetAnnotatedAssetId(future.GetCallback()); EXPECT_FALSE(future.Take()->get_attribute().has_value()); - device_attribute_api::GetAnnotatedLocation(future.GetRepeatingCallback()); + device_attributes_api().GetAnnotatedLocation(future.GetCallback()); EXPECT_FALSE(future.Take()->get_attribute().has_value()); - device_attribute_api::GetSerialNumber(future.GetRepeatingCallback()); + device_attributes_api().GetSerialNumber(future.GetCallback()); EXPECT_FALSE(future.Take()->get_attribute().has_value()); - device_attribute_api::GetHostname(future.GetRepeatingCallback()); + device_attributes_api().GetHostname(future.GetCallback()); EXPECT_FALSE(future.Take()->get_attribute().has_value()); } @@ -78,8 +81,11 @@ class DeviceAttributeAPITest : public policy::DevicePolicyCrosBrowserTest { kSerialNumber); } + DeviceAttributeApi& device_attributes_api() { return device_attributes_api_; } + private: ash::system::ScopedFakeStatisticsProvider fake_statistics_provider_; + DeviceAttributeApiImpl device_attributes_api_; }; IN_PROC_BROWSER_TEST_F(DeviceAttributeAPITest, AllAttributes) { @@ -88,18 +94,18 @@ IN_PROC_BROWSER_TEST_F(DeviceAttributeAPITest, AllAttributes) { base::test::TestFuture future; - device_attribute_api::GetDirectoryId(future.GetRepeatingCallback()); + device_attributes_api().GetDirectoryId(future.GetCallback()); EXPECT_EQ(future.Take()->get_attribute(), kDirectoryApiId); - device_attribute_api::GetAnnotatedAssetId(future.GetRepeatingCallback()); + device_attributes_api().GetAnnotatedAssetId(future.GetCallback()); EXPECT_EQ(future.Take()->get_attribute(), kAnnotatedAssetId); - device_attribute_api::GetAnnotatedLocation(future.GetRepeatingCallback()); + device_attributes_api().GetAnnotatedLocation(future.GetCallback()); EXPECT_EQ(future.Take()->get_attribute(), kAnnotatedLocation); - device_attribute_api::GetHostname(future.GetRepeatingCallback()); + device_attributes_api().GetHostname(future.GetCallback()); EXPECT_EQ(future.Take()->get_attribute(), kHostname); - device_attribute_api::GetSerialNumber(future.GetRepeatingCallback()); + device_attributes_api().GetSerialNumber(future.GetCallback()); EXPECT_EQ(future.Take()->get_attribute(), kSerialNumber); } diff --git a/chrome/browser/device_api/device_service_impl.cc b/chrome/browser/device_api/device_service_impl.cc index 8f86ea02f3cf75..8a14452b84ef8d 100644 --- a/chrome/browser/device_api/device_service_impl.cc +++ b/chrome/browser/device_api/device_service_impl.cc @@ -4,7 +4,9 @@ #include "chrome/browser/device_api/device_service_impl.h" #include "base/check_deref.h" +#include "base/check_is_test.h" #include "base/containers/contains.h" +#include "base/functional/bind.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/app_mode/app_mode_utils.h" #include "chrome/browser/device_api/device_attribute_api.h" @@ -149,8 +151,10 @@ bool IsTrustedContext(content::RenderFrameHost& host, DeviceServiceImpl::DeviceServiceImpl( content::RenderFrameHost& host, - mojo::PendingReceiver receiver) - : DocumentService(host, std::move(receiver)) { + mojo::PendingReceiver receiver, + std::unique_ptr device_attribute_api) + : DocumentService(host, std::move(receiver)), + device_attribute_api_(std::move(device_attribute_api)) { pref_change_registrar_.Init( Profile::FromBrowserContext(host.GetBrowserContext())->GetPrefs()); pref_change_registrar_.Add( @@ -174,7 +178,8 @@ DeviceServiceImpl::~DeviceServiceImpl() = default; // static void DeviceServiceImpl::Create( content::RenderFrameHost* host, - mojo::PendingReceiver receiver) { + mojo::PendingReceiver receiver, + std::unique_ptr device_attribute_api) { CHECK(host); DCHECK_CURRENTLY_ON(content::BrowserThread::UI); @@ -186,7 +191,24 @@ void DeviceServiceImpl::Create( } // The object is bound to the lifetime of |host| and the mojo // connection. See DocumentService for details. - new DeviceServiceImpl(*host, std::move(receiver)); + new DeviceServiceImpl(*host, std::move(receiver), + std::move(device_attribute_api)); +} + +// static +void DeviceServiceImpl::Create( + content::RenderFrameHost* host, + mojo::PendingReceiver receiver) { + Create(host, std::move(receiver), std::make_unique()); +} + +// static +void DeviceServiceImpl::CreateForTest( + content::RenderFrameHost* host, + mojo::PendingReceiver receiver, + std::unique_ptr device_attribute_api) { + CHECK_IS_TEST(); + Create(host, std::move(receiver), std::move(device_attribute_api)); } // static @@ -203,44 +225,41 @@ void DeviceServiceImpl::OnDisposingIfNeeded() { } void DeviceServiceImpl::GetDirectoryId(GetDirectoryIdCallback callback) { - GetDeviceAttribute(base::BindOnce(device_attribute_api::GetDirectoryId), - std::move(callback)); + GetDeviceAttribute(&DeviceAttributeApi::GetDirectoryId, std::move(callback)); } void DeviceServiceImpl::GetHostname(GetHostnameCallback callback) { - GetDeviceAttribute(base::BindOnce(device_attribute_api::GetHostname), - std::move(callback)); + GetDeviceAttribute(&DeviceAttributeApi::GetHostname, std::move(callback)); } void DeviceServiceImpl::GetSerialNumber(GetSerialNumberCallback callback) { - GetDeviceAttribute(base::BindOnce(device_attribute_api::GetSerialNumber), - std::move(callback)); + GetDeviceAttribute(&DeviceAttributeApi::GetSerialNumber, std::move(callback)); } void DeviceServiceImpl::GetAnnotatedAssetId( GetAnnotatedAssetIdCallback callback) { - GetDeviceAttribute(base::BindOnce(device_attribute_api::GetAnnotatedAssetId), + GetDeviceAttribute(&DeviceAttributeApi::GetAnnotatedAssetId, std::move(callback)); } void DeviceServiceImpl::GetAnnotatedLocation( GetAnnotatedLocationCallback callback) { - GetDeviceAttribute(base::BindOnce(device_attribute_api::GetAnnotatedLocation), + GetDeviceAttribute(&DeviceAttributeApi::GetAnnotatedLocation, std::move(callback)); } void DeviceServiceImpl::GetDeviceAttribute( - base::OnceCallback handler, + void (DeviceAttributeApi::*method)(DeviceAttributeCallback callback), DeviceAttributeCallback callback) { if (!IsAffiliatedUser()) { - device_attribute_api::ReportNotAffiliatedError(std::move(callback)); + device_attribute_api_->ReportNotAffiliatedError(std::move(callback)); return; } if (!CanAccessDeviceAttributes(GetPrefs(render_frame_host()), origin())) { - device_attribute_api::ReportNotAllowedError(std::move(callback)); + device_attribute_api_->ReportNotAllowedError(std::move(callback)); return; } - std::move(handler).Run(std::move(callback)); + (device_attribute_api_.get()->*method)(std::move(callback)); } diff --git a/chrome/browser/device_api/device_service_impl.h b/chrome/browser/device_api/device_service_impl.h index 573855dd374ce3..75ed3e6443ef7e 100644 --- a/chrome/browser/device_api/device_service_impl.h +++ b/chrome/browser/device_api/device_service_impl.h @@ -5,7 +5,10 @@ #ifndef CHROME_BROWSER_DEVICE_API_DEVICE_SERVICE_IMPL_H_ #define CHROME_BROWSER_DEVICE_API_DEVICE_SERVICE_IMPL_H_ +#include + #include "base/functional/callback_forward.h" +#include "chrome/browser/device_api/device_attribute_api.h" #include "components/prefs/pref_change_registrar.h" #include "components/prefs/pref_registry_simple.h" #include "content/public/browser/document_service.h" @@ -30,6 +33,11 @@ class DeviceServiceImpl final content::RenderFrameHost* host, mojo::PendingReceiver receiver); + static void CreateForTest( + content::RenderFrameHost* host, + mojo::PendingReceiver receiver, + std::unique_ptr device_attribute_api); + // Register the user prefs. static void RegisterProfilePrefs(PrefRegistrySimple* registry); @@ -45,17 +53,24 @@ class DeviceServiceImpl final void GetAnnotatedLocation(GetAnnotatedLocationCallback callback) override; private: + static void Create( + content::RenderFrameHost* host, + mojo::PendingReceiver receiver, + std::unique_ptr device_attribute_api); + DeviceServiceImpl( content::RenderFrameHost& host, - mojo::PendingReceiver receiver); + mojo::PendingReceiver receiver, + std::unique_ptr device_attribute_api); void GetDeviceAttribute( - base::OnceCallback handler, + void (DeviceAttributeApi::*method)(DeviceAttributeCallback callback), DeviceAttributeCallback callback); void OnDisposingIfNeeded(); PrefChangeRegistrar pref_change_registrar_; + std::unique_ptr device_attribute_api_; }; #endif // CHROME_BROWSER_DEVICE_API_DEVICE_SERVICE_IMPL_H_ diff --git a/chrome/browser/device_api/device_service_unittest.cc b/chrome/browser/device_api/device_service_unittest.cc index 62651e43a89803..2846bd15262f13 100644 --- a/chrome/browser/device_api/device_service_unittest.cc +++ b/chrome/browser/device_api/device_service_unittest.cc @@ -2,11 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include #include #include "base/memory/raw_ptr.h" +#include "base/notimplemented.h" #include "base/test/test_future.h" #include "build/chromeos_buildflags.h" +#include "chrome/browser/device_api/device_attribute_api.h" #include "chrome/browser/device_api/device_service_impl.h" #include "chrome/browser/web_applications/policy/web_app_policy_constants.h" #include "chrome/common/pref_names.h" @@ -62,6 +65,67 @@ constexpr char kNotAllowedOriginErrorMessage[] = } // namespace +namespace { + +using Result = blink::mojom::DeviceAttributeResult; + +constexpr char kAnnotatedAssetId[] = "annotated_asset_id"; +constexpr char kAnnotatedLocation[] = "annotated_location"; +constexpr char kDirectoryApiId[] = "directory_api_id"; +constexpr char kHostname[] = "hostname"; +constexpr char kSerialNumber[] = "serial_number"; + +class FakeDeviceAttributeApi : public DeviceAttributeApi { + public: + FakeDeviceAttributeApi() = default; + ~FakeDeviceAttributeApi() override = default; + + // This method forwards calls to RealDeviceAttributesApi to the test the + // actual error reported by the service. + void ReportNotAllowedError( + base::OnceCallback callback) + override { + NOTIMPLEMENTED(); + } + + // This method forwards calls to RealDeviceAttributesApi to the test the + // actual error reported by the service. + void ReportNotAffiliatedError( + base::OnceCallback callback) + override { + NOTIMPLEMENTED(); + } + + void GetDirectoryId(blink::mojom::DeviceAPIService::GetDirectoryIdCallback + callback) override { + std::move(callback).Run(Result::NewAttribute(kDirectoryApiId)); + } + + void GetHostname( + blink::mojom::DeviceAPIService::GetHostnameCallback callback) override { + std::move(callback).Run(Result::NewAttribute(kHostname)); + } + + void GetSerialNumber(blink::mojom::DeviceAPIService::GetSerialNumberCallback + callback) override { + std::move(callback).Run(Result::NewAttribute(kSerialNumber)); + } + + void GetAnnotatedAssetId( + blink::mojom::DeviceAPIService::GetAnnotatedAssetIdCallback callback) + override { + std::move(callback).Run(Result::NewAttribute(kAnnotatedAssetId)); + } + + void GetAnnotatedLocation( + blink::mojom::DeviceAPIService::GetAnnotatedLocationCallback callback) + override { + std::move(callback).Run(Result::NewAttribute(kAnnotatedLocation)); + } +}; + +} // namespace + class DeviceAPIServiceTest : public ChromeRenderViewHostTestHarness { public: DeviceAPIServiceTest() : account_id_(AccountId::FromUserEmail(kUserEmail)) {} @@ -98,32 +162,55 @@ class DeviceAPIServiceTest : public ChromeRenderViewHostTestHarness { base::Value::List()); } - void TryCreatingService(const GURL& url) { + void TryCreatingService( + const GURL& url, + std::unique_ptr device_attribute_api) { content::NavigationSimulator::NavigateAndCommitFromBrowser(web_contents(), url); - DeviceServiceImpl::Create(main_rfh(), remote_.BindNewPipeAndPassReceiver()); + DeviceServiceImpl::CreateForTest(main_rfh(), + remote_.BindNewPipeAndPassReceiver(), + std::move(device_attribute_api)); } void VerifyErrorMessageResultForAllDeviceAttributesAPIs( const std::string& expected_error_message) { base::test::TestFuture future; - remote()->get()->GetDirectoryId(future.GetRepeatingCallback()); + remote()->get()->GetDirectoryId(future.GetCallback()); EXPECT_EQ(future.Take()->get_error_message(), expected_error_message); - remote()->get()->GetHostname(future.GetRepeatingCallback()); + remote()->get()->GetHostname(future.GetCallback()); EXPECT_EQ(future.Take()->get_error_message(), expected_error_message); - remote()->get()->GetSerialNumber(future.GetRepeatingCallback()); + remote()->get()->GetSerialNumber(future.GetCallback()); EXPECT_EQ(future.Take()->get_error_message(), expected_error_message); - remote()->get()->GetAnnotatedAssetId(future.GetRepeatingCallback()); + remote()->get()->GetAnnotatedAssetId(future.GetCallback()); EXPECT_EQ(future.Take()->get_error_message(), expected_error_message); - remote()->get()->GetAnnotatedLocation(future.GetRepeatingCallback()); + remote()->get()->GetAnnotatedLocation(future.GetCallback()); EXPECT_EQ(future.Take()->get_error_message(), expected_error_message); } + void VerifyCanAccessForAllDeviceAttributesAPIs() { + base::test::TestFuture future; + + remote()->get()->GetDirectoryId(future.GetCallback()); + EXPECT_EQ(future.Take()->get_attribute(), kDirectoryApiId); + + remote()->get()->GetHostname(future.GetCallback()); + EXPECT_EQ(future.Take()->get_attribute(), kHostname); + + remote()->get()->GetSerialNumber(future.GetCallback()); + EXPECT_EQ(future.Take()->get_attribute(), kSerialNumber); + + remote()->get()->GetAnnotatedAssetId(future.GetCallback()); + EXPECT_EQ(future.Take()->get_attribute(), kAnnotatedAssetId); + + remote()->get()->GetAnnotatedLocation(future.GetCallback()); + EXPECT_EQ(future.Take()->get_attribute(), kAnnotatedLocation); + } + const AccountId& account_id() const { return account_id_; } mojo::Remote* remote() { return &remote_; } @@ -134,7 +221,8 @@ class DeviceAPIServiceTest : public ChromeRenderViewHostTestHarness { }; TEST_F(DeviceAPIServiceTest, ConnectsForTrustedApps) { - TryCreatingService(GURL(kTrustedUrl)); + TryCreatingService(GURL(kTrustedUrl), + std::make_unique()); remote()->FlushForTesting(); ASSERT_TRUE(remote()->is_connected()); } @@ -143,20 +231,23 @@ TEST_F(DeviceAPIServiceTest, ConnectsForTrustedApps) { TEST_F(DeviceAPIServiceTest, DoesNotConnectForIncognitoProfile) { profile_metrics::SetBrowserProfileType( profile(), profile_metrics::BrowserProfileType::kIncognito); - TryCreatingService(GURL(kTrustedUrl)); + TryCreatingService(GURL(kTrustedUrl), + std::make_unique()); remote()->FlushForTesting(); ASSERT_FALSE(remote()->is_connected()); } TEST_F(DeviceAPIServiceTest, DoesNotConnectForUntrustedApps) { - TryCreatingService(GURL(kUntrustedUrl)); + TryCreatingService(GURL(kUntrustedUrl), + std::make_unique()); remote()->FlushForTesting(); ASSERT_FALSE(remote()->is_connected()); } TEST_F(DeviceAPIServiceTest, DisconnectWhenTrustRevoked) { - TryCreatingService(GURL(kTrustedUrl)); + TryCreatingService(GURL(kTrustedUrl), + std::make_unique()); remote()->FlushForTesting(); RemoveTrustedApps(); remote()->FlushForTesting(); @@ -164,7 +255,8 @@ TEST_F(DeviceAPIServiceTest, DisconnectWhenTrustRevoked) { } TEST_F(DeviceAPIServiceTest, ReportErrorForDefaultUser) { - TryCreatingService(GURL(kTrustedUrl)); + TryCreatingService(GURL(kTrustedUrl), + std::make_unique()); VerifyErrorMessageResultForAllDeviceAttributesAPIs( kNotAffiliatedErrorMessage); ASSERT_TRUE(remote()->is_connected()); @@ -193,19 +285,22 @@ class DeviceAPIServiceIwaTest : public DeviceAPIServiceTest { }; TEST_F(DeviceAPIServiceIwaTest, ConnectsForTrustedApps) { - TryCreatingService(GURL(kTrustedIwaAppOrigin)); + TryCreatingService(GURL(kTrustedIwaAppOrigin), + std::make_unique()); remote()->FlushForTesting(); ASSERT_TRUE(remote()->is_connected()); } TEST_F(DeviceAPIServiceIwaTest, DoesNotConnectForUntrustedApps) { - TryCreatingService(GURL(kUntrustedIwaAppOrigin)); + TryCreatingService(GURL(kUntrustedIwaAppOrigin), + std::make_unique()); remote()->FlushForTesting(); ASSERT_FALSE(remote()->is_connected()); } TEST_F(DeviceAPIServiceIwaTest, DisconnectWhenTrustRevoked) { - TryCreatingService(GURL(kTrustedIwaAppOrigin)); + TryCreatingService(GURL(kTrustedIwaAppOrigin), + std::make_unique()); remote()->FlushForTesting(); RemoveTrustedApps(); remote()->FlushForTesting(); @@ -213,7 +308,8 @@ TEST_F(DeviceAPIServiceIwaTest, DisconnectWhenTrustRevoked) { } TEST_F(DeviceAPIServiceIwaTest, ReportErrorForDefaultUser) { - TryCreatingService(GURL(kTrustedIwaAppOrigin)); + TryCreatingService(GURL(kTrustedIwaAppOrigin), + std::make_unique()); VerifyErrorMessageResultForAllDeviceAttributesAPIs( kNotAffiliatedErrorMessage); ASSERT_TRUE(remote()->is_connected()); @@ -247,7 +343,8 @@ class DeviceAPIServiceRegularUserTest : public DeviceAPIServiceTest { TEST_F(DeviceAPIServiceRegularUserTest, ReportErrorForUnaffiliatedUser) { LoginRegularUser(false); - TryCreatingService(GURL(kTrustedUrl)); + TryCreatingService(GURL(kTrustedUrl), + std::make_unique()); VerifyErrorMessageResultForAllDeviceAttributesAPIs( kNotAffiliatedErrorMessage); ASSERT_TRUE(remote()->is_connected()); @@ -255,7 +352,8 @@ TEST_F(DeviceAPIServiceRegularUserTest, ReportErrorForUnaffiliatedUser) { TEST_F(DeviceAPIServiceRegularUserTest, ReportErrorForDisallowedOrigin) { LoginRegularUser(true); - TryCreatingService(GURL(kTrustedUrl)); + TryCreatingService(GURL(kTrustedUrl), + std::make_unique()); RemoveAllowedOrigin(); VerifyErrorMessageResultForAllDeviceAttributesAPIs( @@ -309,16 +407,32 @@ class DeviceAPIServiceWithKioskUserTest : public DeviceAPIServiceTest { // Kiosk app. TEST_F(DeviceAPIServiceWithKioskUserTest, ConnectsForKioskOrigin) { LoginKioskUser(); - TryCreatingService(GURL(kKioskAppUrl)); + TryCreatingService(GURL(kKioskAppUrl), + std::make_unique()); remote()->FlushForTesting(); ASSERT_TRUE(remote()->is_connected()); } +// The service should be enabled if the current origin is same as the origin of +// Kiosk app. +TEST_F(DeviceAPIServiceWithKioskUserTest, + KioskOriginCanAccessDeviceAttributes) { + LoginKioskUser(); + TryCreatingService(GURL(kKioskAppUrl), + std::make_unique()); + + remote()->FlushForTesting(); + + ASSERT_TRUE(remote()->is_connected()); + VerifyCanAccessForAllDeviceAttributesAPIs(); +} + // The service should be disabled if the current origin is different from the // origin of Kiosk app. TEST_F(DeviceAPIServiceWithKioskUserTest, DoesNotConnectForInvalidOrigin) { LoginKioskUser(); - TryCreatingService(GURL(kInvalidKioskAppUrl)); + TryCreatingService(GURL(kInvalidKioskAppUrl), + std::make_unique()); remote()->FlushForTesting(); ASSERT_FALSE(remote()->is_connected()); } @@ -328,7 +442,8 @@ TEST_F(DeviceAPIServiceWithKioskUserTest, DoesNotConnectForInvalidOrigin) { TEST_F(DeviceAPIServiceWithKioskUserTest, DoesNotConnectForNonKioskTrustedOrigin) { LoginKioskUser(); - TryCreatingService(GURL(kTrustedUrl)); + TryCreatingService(GURL(kTrustedUrl), + std::make_unique()); remote()->FlushForTesting(); ASSERT_FALSE(remote()->is_connected()); } @@ -338,7 +453,8 @@ TEST_F(DeviceAPIServiceWithKioskUserTest, DoesNotConnectForChromeAppKioskSession) { LoginChromeAppKioskUser(); - TryCreatingService(GURL(kKioskAppUrl)); + TryCreatingService(GURL(kKioskAppUrl), + std::make_unique()); remote()->FlushForTesting(); ASSERT_FALSE(remote()->is_connected()); }