diff --git a/internal/data/BUILD b/internal/data/BUILD index b03e493e..0e019972 100644 --- a/internal/data/BUILD +++ b/internal/data/BUILD @@ -28,6 +28,7 @@ cc_library( "leveldb_data_set.h", ], deps = [ + "//internal/base:file_path", "//internal/platform:types", "//third_party/leveldb:db", "//third_party/leveldb:table", diff --git a/internal/data/leveldb_data_set.h b/internal/data/leveldb_data_set.h index 4be5a217..a341acfd 100644 --- a/internal/data/leveldb_data_set.h +++ b/internal/data/leveldb_data_set.h @@ -28,6 +28,7 @@ #include "third_party/leveldb/include/options.h" #include "third_party/leveldb/include/slice.h" #include "third_party/leveldb/include/status.h" +#include "internal/base/file_path.h" #include "internal/data/data_set.h" #if defined(_WIN32) #include "location/nearby/apps/better_together/windows/common/leveldb_env_windows.h" @@ -46,7 +47,13 @@ class LeveldbDataSet : public DataSet { public: using KeyEntryVector = std::vector>; - explicit LeveldbDataSet(absl::string_view path) : path_(path) {} + explicit LeveldbDataSet(const FilePath& db_dir) : path_(db_dir.ToString()) { +#if defined(_WIN32) + // In Windows use the Unicode compatible environment. + db_options_.env = nearby::windows::WindowsEnv::Default(); +#endif // defined(_WIN32) + db_options_.create_if_missing = true; + } ~LeveldbDataSet() override = default; void Initialize(absl::AnyInvocable callback) override; @@ -72,6 +79,7 @@ class LeveldbDataSet : public DataSet { private: std::string path_; + leveldb::Options db_options_; std::unique_ptr db_ = nullptr; InitStatus status_ = InitStatus::kNotInitialized; }; @@ -81,13 +89,8 @@ template void LeveldbDataSet::Initialize( absl::AnyInvocable callback) { - leveldb::Options options; - options.create_if_missing = true; -#if defined(_WIN32) - options.env = nearby::windows::WindowsEnv::Default(); -#endif // defined(_WIN32) leveldb::DB* db; - leveldb::Status status = leveldb::DB::Open(options, path_, &db); + leveldb::Status status = leveldb::DB::Open(db_options_, path_, &db); db_ = std::unique_ptr(db); if (status.ok()) { @@ -226,11 +229,7 @@ void LeveldbDataSet::Destroy( absl::AnyInvocable callback) { LOG(INFO) << "Destroy is called."; db_.reset(); - leveldb::Options options; -#if defined(_WIN32) - options.env = nearby::windows::WindowsEnv::Default(); -#endif // defined(_WIN32) - leveldb::DestroyDB(path_, options); + leveldb::DestroyDB(path_, db_options_); std::move(callback)(true); } diff --git a/internal/data/leveldb_data_set_test.cc b/internal/data/leveldb_data_set_test.cc index b469f019..928ed60b 100644 --- a/internal/data/leveldb_data_set_test.cc +++ b/internal/data/leveldb_data_set_test.cc @@ -57,7 +57,7 @@ FilePath GenerateLeveldbPath() { template std::unique_ptr> CreateDataSet( const FilePath& path) { - return std::make_unique>(path.ToString()); + return std::make_unique>(path); } template diff --git a/sharing/certificates/BUILD b/sharing/certificates/BUILD index 33443108..289e8b8b 100644 --- a/sharing/certificates/BUILD +++ b/sharing/certificates/BUILD @@ -40,6 +40,7 @@ cc_library( visibility = ["//visibility:public"], deps = [ "//internal/base", + "//internal/base:file_path", "//internal/crypto_cros", "//internal/flags:nearby_flags", "//internal/platform:types", @@ -92,6 +93,7 @@ cc_library( deps = [ ":certificates", "//internal/base:bluetooth_address", + "//internal/base:file_path", "//internal/crypto_cros", "//sharing/common:enum", "//sharing/contacts", diff --git a/sharing/certificates/fake_nearby_share_certificate_manager.cc b/sharing/certificates/fake_nearby_share_certificate_manager.cc index 43f8c4f1..71bd6e89 100644 --- a/sharing/certificates/fake_nearby_share_certificate_manager.cc +++ b/sharing/certificates/fake_nearby_share_certificate_manager.cc @@ -23,7 +23,7 @@ #include #include -#include "absl/strings/string_view.h" +#include "internal/base/file_path.h" #include "sharing/certificates/nearby_share_certificate_manager.h" #include "sharing/certificates/nearby_share_encrypted_metadata_key.h" #include "sharing/certificates/nearby_share_private_certificate.h" @@ -50,7 +50,7 @@ std::unique_ptr FakeNearbyShareCertificateManager::Factory::CreateInstance( nearby::Context* context, NearbyShareLocalDeviceDataManager* local_device_data_manager, - NearbyShareContactManager* contact_manager, absl::string_view profile_path, + NearbyShareContactManager* contact_manager, const FilePath& profile_path, nearby::sharing::api::SharingRpcClientFactory* client_factory) { auto instance = std::make_unique(); instances_.push_back(instance.get()); diff --git a/sharing/certificates/fake_nearby_share_certificate_manager.h b/sharing/certificates/fake_nearby_share_certificate_manager.h index 67f77e21..c58d36ba 100644 --- a/sharing/certificates/fake_nearby_share_certificate_manager.h +++ b/sharing/certificates/fake_nearby_share_certificate_manager.h @@ -24,7 +24,7 @@ #include #include -#include "absl/strings/string_view.h" +#include "internal/base/file_path.h" #include "sharing/certificates/nearby_share_certificate_manager.h" #include "sharing/certificates/nearby_share_certificate_manager_impl.h" #include "sharing/certificates/nearby_share_encrypted_metadata_key.h" @@ -62,7 +62,7 @@ class FakeNearbyShareCertificateManager : public NearbyShareCertificateManager { Context* context, NearbyShareLocalDeviceDataManager* local_device_data_manager, NearbyShareContactManager* contact_manager, - absl::string_view profile_path, + const FilePath& profile_path, nearby::sharing::api::SharingRpcClientFactory* client_factory) override; std::vector instances_; diff --git a/sharing/certificates/nearby_share_certificate_manager_impl.cc b/sharing/certificates/nearby_share_certificate_manager_impl.cc index 32100a2f..efd38e68 100644 --- a/sharing/certificates/nearby_share_certificate_manager_impl.cc +++ b/sharing/certificates/nearby_share_certificate_manager_impl.cc @@ -38,6 +38,7 @@ #include "absl/synchronization/notification.h" #include "absl/time/time.h" #include "absl/types/span.h" +#include "internal/base/file_path.h" #include "internal/platform/implementation/account_manager.h" #include "proto/identity/v1/resources.pb.h" #include "proto/identity/v1/rpcs.pb.h" @@ -186,7 +187,7 @@ std::unique_ptr NearbyShareCertificateManagerImpl::Factory::Create( Context* context, SharingPlatform& sharing_platform, NearbyShareLocalDeviceDataManager* local_device_data_manager, - NearbyShareContactManager* contact_manager, absl::string_view profile_path, + NearbyShareContactManager* contact_manager, const FilePath& profile_path, nearby::sharing::api::SharingRpcClientFactory* client_factory) { DCHECK(context); @@ -196,11 +197,12 @@ NearbyShareCertificateManagerImpl::Factory::Create( client_factory); } + FilePath database_path = profile_path; + database_path.append(FilePath(kPublicCertificateDatabaseName)); return absl::WrapUnique(new NearbyShareCertificateManagerImpl( context, sharing_platform.GetPreferenceManager(), sharing_platform.GetAccountManager(), - sharing_platform.CreatePublicCertificateDatabase( - absl::StrCat(profile_path, "/", kPublicCertificateDatabaseName)), + sharing_platform.CreatePublicCertificateDatabase(database_path), local_device_data_manager, contact_manager, client_factory)); } diff --git a/sharing/certificates/nearby_share_certificate_manager_impl.h b/sharing/certificates/nearby_share_certificate_manager_impl.h index bcf1d52a..cd3072aa 100644 --- a/sharing/certificates/nearby_share_certificate_manager_impl.h +++ b/sharing/certificates/nearby_share_certificate_manager_impl.h @@ -24,8 +24,8 @@ #include #include "absl/functional/any_invocable.h" -#include "absl/strings/string_view.h" #include "absl/time/time.h" +#include "internal/base/file_path.h" #include "internal/platform/implementation/account_manager.h" #include "internal/platform/task_runner.h" #include "sharing/certificates/nearby_share_certificate_manager.h" @@ -68,7 +68,7 @@ class NearbyShareCertificateManagerImpl nearby::sharing::api::SharingPlatform& sharing_platform, NearbyShareLocalDeviceDataManager* local_device_data_manager, NearbyShareContactManager* contact_manager, - absl::string_view profile_path, + const FilePath& profile_path, nearby::sharing::api::SharingRpcClientFactory* client_factory); static void SetFactoryForTesting(Factory* test_factory); @@ -78,7 +78,7 @@ class NearbyShareCertificateManagerImpl Context* context, NearbyShareLocalDeviceDataManager* local_device_data_manager, NearbyShareContactManager* contact_manager, - absl::string_view profile_path, + const FilePath& profile_path, nearby::sharing::api::SharingRpcClientFactory* client_factory) = 0; private: diff --git a/sharing/certificates/nearby_share_certificate_manager_impl_test.cc b/sharing/certificates/nearby_share_certificate_manager_impl_test.cc index a932eb46..7e0ed856 100644 --- a/sharing/certificates/nearby_share_certificate_manager_impl_test.cc +++ b/sharing/certificates/nearby_share_certificate_manager_impl_test.cc @@ -147,8 +147,8 @@ class NearbyShareCertificateManagerImplTest local_device_data_manager_->SetUsingIdentityRpc(use_identity_rpc); cert_manager_ = NearbyShareCertificateManagerImpl::Factory::Create( &fake_context_, mock_sharing_platform_, - local_device_data_manager_.get(), contact_manager_.get(), std::string(), - &client_factory_); + local_device_data_manager_.get(), contact_manager_.get(), + /*profile_path=*/{}, &client_factory_); cert_manager_->AddObserver(this); cert_store_ = cert_store_factory_.instances().back(); diff --git a/sharing/internal/api/mock_sharing_platform.h b/sharing/internal/api/mock_sharing_platform.h index 317dd753..d18ad76a 100644 --- a/sharing/internal/api/mock_sharing_platform.h +++ b/sharing/internal/api/mock_sharing_platform.h @@ -87,8 +87,8 @@ class MockSharingPlatform : public SharingPlatform { MOCK_METHOD(TaskRunner&, GetDefaultTaskRunner, (), (override)); MOCK_METHOD(nearby::DeviceInfo&, GetDeviceInfo, (), (override)); MOCK_METHOD(std::unique_ptr, - CreatePublicCertificateDatabase, - (absl::string_view database_path), (override)); + CreatePublicCertificateDatabase, (const FilePath& database_path), + (override)); MOCK_METHOD( std::unique_ptr, CreateSharingRpcClientFactory, (Clock * clock, diff --git a/sharing/internal/api/sharing_platform.h b/sharing/internal/api/sharing_platform.h index bef2d08a..924870b8 100644 --- a/sharing/internal/api/sharing_platform.h +++ b/sharing/internal/api/sharing_platform.h @@ -82,7 +82,7 @@ class SharingPlatform { virtual TaskRunner& GetDefaultTaskRunner() = 0; virtual nearby::DeviceInfo& GetDeviceInfo() = 0; virtual std::unique_ptr - CreatePublicCertificateDatabase(absl::string_view database_path) = 0; + CreatePublicCertificateDatabase(const FilePath& database_path) = 0; virtual std::unique_ptr CreateSharingRpcClientFactory( diff --git a/sharing/nearby_sharing_service_impl.cc b/sharing/nearby_sharing_service_impl.cc index 137d5fde..7537cfd1 100644 --- a/sharing/nearby_sharing_service_impl.cc +++ b/sharing/nearby_sharing_service_impl.cc @@ -246,13 +246,12 @@ NearbySharingServiceImpl::NearbySharingServiceImpl( CHECK(analytics_recorder); is_shutting_down_ = std::make_unique(false); - FilePath full_database_path = + FilePath profile_path = device_info_.GetAppDataPath().append(FilePath(kProfileRelativePath)); certificate_manager_ = NearbyShareCertificateManagerImpl::Factory::Create( context_, sharing_platform, local_device_data_manager_.get(), - contact_manager_.get(), full_database_path.ToString(), - nearby_share_client_factory_.get()), + contact_manager_.get(), profile_path, nearby_share_client_factory_.get()), certificate_manager_->AddObserver(this); context_->GetConnectivityManager()->RegisterConnectionListener(