Skip to content

Commit 2311c36

Browse files
authored
Integrate Firestore with Firebase platform logging (#6507)
The sample user agent string I'm getting in XCode is `apple-platform/ios apple-sdk/17E8258 fire-fst/1.17.1 fire-ios/6.10.2 swift/true xcode/11E503a`.
1 parent d248d8d commit 2311c36

27 files changed

+431
-49
lines changed

Firestore/Example/Tests/API/FSTAPIHelpers.mm

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include "Firestore/core/src/core/view_snapshot.h"
3737
#include "Firestore/core/src/model/document.h"
3838
#include "Firestore/core/src/model/document_set.h"
39+
#include "Firestore/core/src/remote/firebase_metadata_provider.h"
3940
#include "Firestore/core/src/util/string_apple.h"
4041
#include "Firestore/core/test/unit/testutil/testutil.h"
4142

@@ -69,6 +70,7 @@
6970
persistenceKey:"db123"
7071
credentialsProvider:nullptr
7172
workerQueue:nullptr
73+
firebaseMetadataProvider:nullptr
7274
firebaseApp:nil
7375
instanceRegistry:nil];
7476
});

Firestore/Example/Tests/Integration/FSTDatastoreTests.mm

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
#include "Firestore/core/src/model/set_mutation.h"
4242
#include "Firestore/core/src/remote/connectivity_monitor.h"
4343
#include "Firestore/core/src/remote/datastore.h"
44+
#include "Firestore/core/src/remote/firebase_metadata_provider.h"
45+
#include "Firestore/core/src/remote/firebase_metadata_provider_noop.h"
4446
#include "Firestore/core/src/remote/remote_event.h"
4547
#include "Firestore/core/src/remote/remote_store.h"
4648
#include "Firestore/core/src/util/async_queue.h"
@@ -75,8 +77,10 @@
7577
using firebase::firestore::model::OnlineState;
7678
using firebase::firestore::model::TargetId;
7779
using firebase::firestore::remote::ConnectivityMonitor;
80+
using firebase::firestore::remote::CreateFirebaseMetadataProviderNoOp;
7881
using firebase::firestore::remote::CreateNoOpConnectivityMonitor;
7982
using firebase::firestore::remote::Datastore;
83+
using firebase::firestore::remote::FirebaseMetadataProvider;
8084
using firebase::firestore::remote::GrpcConnection;
8185
using firebase::firestore::remote::RemoteEvent;
8286
using firebase::firestore::remote::RemoteStore;
@@ -225,6 +229,7 @@ @implementation FSTDatastoreTests {
225229
SimpleQueryEngine _queryEngine;
226230

227231
std::unique_ptr<ConnectivityMonitor> _connectivityMonitor;
232+
std::unique_ptr<FirebaseMetadataProvider> _firebaseMetadataProvider;
228233
std::shared_ptr<Datastore> _datastore;
229234
std::unique_ptr<RemoteStore> _remoteStore;
230235
}
@@ -245,9 +250,10 @@ - (void)setUp {
245250

246251
_testWorkerQueue = testutil::AsyncQueueForTesting();
247252
_connectivityMonitor = CreateNoOpConnectivityMonitor();
248-
_datastore = std::make_shared<Datastore>(_databaseInfo, _testWorkerQueue,
249-
std::make_shared<EmptyCredentialsProvider>(),
250-
_connectivityMonitor.get());
253+
_firebaseMetadataProvider = CreateFirebaseMetadataProviderNoOp();
254+
_datastore = std::make_shared<Datastore>(
255+
_databaseInfo, _testWorkerQueue, std::make_shared<EmptyCredentialsProvider>(),
256+
_connectivityMonitor.get(), _firebaseMetadataProvider.get());
251257

252258
_persistence = MemoryPersistence::WithEagerGarbageCollector();
253259
_localStore =

Firestore/Example/Tests/SpecTests/FSTMockDatastore.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ namespace firestore {
3131
namespace remote {
3232

3333
class ConnectivityMonitor;
34+
class FirebaseMetadataProvider;
3435
class MockWatchStream;
3536
class MockWriteStream;
3637

@@ -39,7 +40,8 @@ class MockDatastore : public Datastore {
3940
MockDatastore(const core::DatabaseInfo& database_info,
4041
const std::shared_ptr<util::AsyncQueue>& worker_queue,
4142
std::shared_ptr<auth::CredentialsProvider> credentials,
42-
ConnectivityMonitor* connectivity_monitor);
43+
ConnectivityMonitor* connectivity_monitor,
44+
FirebaseMetadataProvider* firebase_metadata_provider);
4345

4446
std::shared_ptr<WatchStream> CreateWatchStream(WatchStreamCallback* callback) override;
4547
std::shared_ptr<WriteStream> CreateWriteStream(WriteStreamCallback* callback) override;

Firestore/Example/Tests/SpecTests/FSTMockDatastore.mm

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "Firestore/core/src/model/mutation.h"
3030
#include "Firestore/core/src/remote/connectivity_monitor.h"
3131
#include "Firestore/core/src/remote/datastore.h"
32+
#include "Firestore/core/src/remote/firebase_metadata_provider.h"
3233
#include "Firestore/core/src/remote/grpc_connection.h"
3334
#include "Firestore/core/src/remote/serializer.h"
3435
#include "Firestore/core/src/remote/stream.h"
@@ -51,6 +52,7 @@
5152
using firebase::firestore::model::SnapshotVersion;
5253
using firebase::firestore::model::TargetId;
5354
using firebase::firestore::remote::ConnectivityMonitor;
55+
using firebase::firestore::remote::FirebaseMetadataProvider;
5456
using firebase::firestore::remote::GrpcConnection;
5557
using firebase::firestore::remote::WatchChange;
5658
using firebase::firestore::remote::WatchStream;
@@ -243,8 +245,10 @@ int sent_mutations_count() const {
243245
MockDatastore::MockDatastore(const core::DatabaseInfo& database_info,
244246
const std::shared_ptr<util::AsyncQueue>& worker_queue,
245247
std::shared_ptr<auth::CredentialsProvider> credentials,
246-
ConnectivityMonitor* connectivity_monitor)
247-
: Datastore{database_info, worker_queue, credentials, connectivity_monitor},
248+
ConnectivityMonitor* connectivity_monitor,
249+
FirebaseMetadataProvider* firebase_metadata_provider)
250+
: Datastore{database_info, worker_queue, credentials, connectivity_monitor,
251+
firebase_metadata_provider},
248252
database_info_{&database_info},
249253
worker_queue_{worker_queue},
250254
credentials_{credentials} {

Firestore/Example/Tests/SpecTests/FSTSyncEngineTestDriver.mm

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
#include "Firestore/core/src/local/persistence.h"
4242
#include "Firestore/core/src/model/database_id.h"
4343
#include "Firestore/core/src/model/document_key.h"
44+
#include "Firestore/core/src/remote/firebase_metadata_provider.h"
45+
#include "Firestore/core/src/remote/firebase_metadata_provider_noop.h"
4446
#include "Firestore/core/src/remote/remote_store.h"
4547
#include "Firestore/core/src/util/async_queue.h"
4648
#include "Firestore/core/src/util/delayed_constructor.h"
@@ -82,8 +84,10 @@
8284
using firebase::firestore::model::OnlineState;
8385
using firebase::firestore::model::SnapshotVersion;
8486
using firebase::firestore::model::TargetId;
87+
using firebase::firestore::remote::CreateFirebaseMetadataProviderNoOp;
8588
using firebase::firestore::remote::CreateNoOpConnectivityMonitor;
8689
using firebase::firestore::remote::ConnectivityMonitor;
90+
using firebase::firestore::remote::FirebaseMetadataProvider;
8791
using firebase::firestore::remote::MockDatastore;
8892
using firebase::firestore::remote::RemoteStore;
8993
using firebase::firestore::remote::WatchChange;
@@ -172,6 +176,8 @@ @implementation FSTSyncEngineTestDriver {
172176

173177
std::unique_ptr<ConnectivityMonitor> _connectivityMonitor;
174178

179+
std::unique_ptr<FirebaseMetadataProvider> _firebaseMetadataProvider;
180+
175181
DelayedConstructor<EventManager> _eventManager;
176182

177183
// Set of active targets, keyed by target Id, mapped to corresponding resume token,
@@ -219,10 +225,11 @@ - (instancetype)initWithPersistence:(std::unique_ptr<Persistence>)persistence
219225
_persistence = std::move(persistence);
220226
_localStore = absl::make_unique<LocalStore>(_persistence.get(), &_queryEngine, initialUser);
221227
_connectivityMonitor = CreateNoOpConnectivityMonitor();
228+
_firebaseMetadataProvider = CreateFirebaseMetadataProviderNoOp();
222229

223-
_datastore = std::make_shared<MockDatastore>(_databaseInfo, _workerQueue,
224-
std::make_shared<EmptyCredentialsProvider>(),
225-
_connectivityMonitor.get());
230+
_datastore = std::make_shared<MockDatastore>(
231+
_databaseInfo, _workerQueue, std::make_shared<EmptyCredentialsProvider>(),
232+
_connectivityMonitor.get(), _firebaseMetadataProvider.get());
226233
_remoteStore = absl::make_unique<RemoteStore>(
227234
_localStore.get(), _datastore, _workerQueue, _connectivityMonitor.get(),
228235
[self](OnlineState onlineState) { _syncEngine->HandleOnlineStateChange(onlineState); });

Firestore/Example/Tests/Util/FSTIntegrationTestCase.mm

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
#include "Firestore/core/src/auth/user.h"
4141
#include "Firestore/core/src/local/leveldb_opener.h"
4242
#include "Firestore/core/src/model/database_id.h"
43+
#include "Firestore/core/src/remote/firebase_metadata_provider_apple.h"
4344
#include "Firestore/core/src/remote/grpc_connection.h"
4445
#include "Firestore/core/src/util/async_queue.h"
4546
#include "Firestore/core/src/util/autoid.h"
@@ -61,9 +62,10 @@
6162
using firebase::firestore::core::DatabaseInfo;
6263
using firebase::firestore::local::LevelDbOpener;
6364
using firebase::firestore::model::DatabaseId;
65+
using firebase::firestore::remote::GrpcConnection;
66+
using firebase::firestore::remote::FirebaseMetadataProviderApple;
6467
using firebase::firestore::testutil::AppForUnitTesting;
6568
using firebase::firestore::testutil::AsyncQueueForTesting;
66-
using firebase::firestore::remote::GrpcConnection;
6769
using firebase::firestore::util::AsyncQueue;
6870
using firebase::firestore::util::CreateAutoId;
6971
using firebase::firestore::util::Filesystem;
@@ -275,6 +277,7 @@ - (FIRFirestore *)firestoreWithApp:(FIRApp *)app {
275277
persistenceKey:util::MakeString(persistenceKey)
276278
credentialsProvider:_fakeCredentialsProvider
277279
workerQueue:AsyncQueueForTesting()
280+
firebaseMetadataProvider:absl::make_unique<FirebaseMetadataProviderApple>(app)
278281
firebaseApp:app
279282
instanceRegistry:nil];
280283

Firestore/Source/API/FIRFirestore+Internal.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,18 @@
2727
@class FSTFirestoreClient;
2828
@class FSTUserDataConverter;
2929

30+
namespace firebase {
31+
namespace firestore {
32+
namespace remote {
33+
class FirebaseMetadataProvider;
34+
} // namespace remote
35+
} // namespace firestore
36+
} // namespace firebase
37+
3038
namespace api = firebase::firestore::api;
3139
namespace auth = firebase::firestore::auth;
3240
namespace model = firebase::firestore::model;
41+
namespace remote = firebase::firestore::remote;
3342
namespace util = firebase::firestore::util;
3443

3544
NS_ASSUME_NONNULL_BEGIN
@@ -52,6 +61,8 @@ NS_ASSUME_NONNULL_BEGIN
5261
persistenceKey:(std::string)persistenceKey
5362
credentialsProvider:(std::shared_ptr<auth::CredentialsProvider>)credentialsProvider
5463
workerQueue:(std::shared_ptr<util::AsyncQueue>)workerQueue
64+
firebaseMetadataProvider:
65+
(std::unique_ptr<remote::FirebaseMetadataProvider>)firebaseMetadataProvider
5566
firebaseApp:(FIRApp *)app
5667
instanceRegistry:(nullable id<FSTFirestoreInstanceRegistry>)registry;
5768
@end

Firestore/Source/API/FIRFirestore.mm

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
#include "Firestore/core/src/core/event_listener.h"
4242
#include "Firestore/core/src/core/transaction.h"
4343
#include "Firestore/core/src/model/database_id.h"
44+
#include "Firestore/core/src/remote/firebase_metadata_provider.h"
4445
#include "Firestore/core/src/util/async_queue.h"
4546
#include "Firestore/core/src/util/config.h"
4647
#include "Firestore/core/src/util/empty.h"
@@ -61,6 +62,7 @@
6162
using firebase::firestore::auth::CredentialsProvider;
6263
using firebase::firestore::core::EventListener;
6364
using firebase::firestore::model::DatabaseId;
65+
using firebase::firestore::remote::FirebaseMetadataProvider;
6466
using firebase::firestore::util::AsyncQueue;
6567
using firebase::firestore::util::Empty;
6668
using firebase::firestore::util::MakeCallback;
@@ -134,12 +136,14 @@ - (instancetype)initWithDatabaseID:(model::DatabaseId)databaseID
134136
persistenceKey:(std::string)persistenceKey
135137
credentialsProvider:(std::shared_ptr<CredentialsProvider>)credentialsProvider
136138
workerQueue:(std::shared_ptr<AsyncQueue>)workerQueue
139+
firebaseMetadataProvider:
140+
(std::unique_ptr<FirebaseMetadataProvider>)firebaseMetadataProvider
137141
firebaseApp:(FIRApp *)app
138142
instanceRegistry:(nullable id<FSTFirestoreInstanceRegistry>)registry {
139143
if (self = [super init]) {
140-
_firestore = std::make_shared<Firestore>(std::move(databaseID), std::move(persistenceKey),
141-
std::move(credentialsProvider), std::move(workerQueue),
142-
(__bridge void *)self);
144+
_firestore = std::make_shared<Firestore>(
145+
std::move(databaseID), std::move(persistenceKey), std::move(credentialsProvider),
146+
std::move(workerQueue), std::move(firebaseMetadataProvider), (__bridge void *)self);
143147

144148
_app = app;
145149
_registry = registry;

Firestore/Source/API/FSTFirestoreComponent.mm

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
#include "Firestore/core/src/auth/credentials_provider.h"
3030
#include "Firestore/core/src/auth/firebase_credentials_provider_apple.h"
3131
#include "Firestore/core/src/model/maybe_document.h"
32+
#include "Firestore/core/src/remote/firebase_metadata_provider.h"
33+
#include "Firestore/core/src/remote/firebase_metadata_provider_apple.h"
3234
#include "Firestore/core/src/util/async_queue.h"
3335
#include "Firestore/core/src/util/exception.h"
3436
#include "Firestore/core/src/util/executor.h"
@@ -39,6 +41,8 @@
3941
using firebase::firestore::api::Firestore;
4042
using firebase::firestore::auth::CredentialsProvider;
4143
using firebase::firestore::auth::FirebaseCredentialsProvider;
44+
using firebase::firestore::remote::FirebaseMetadataProvider;
45+
using firebase::firestore::remote::FirebaseMetadataProviderApple;
4246
using firebase::firestore::util::AsyncQueue;
4347
using firebase::firestore::util::Executor;
4448
using firebase::firestore::util::ThrowInvalidArgument;
@@ -99,12 +103,15 @@ - (FIRFirestore *)firestoreForDatabase:(NSString *)database {
99103
id<FIRAuthInterop> auth = FIR_COMPONENT(FIRAuthInterop, self.app.container);
100104
auto credentialsProvider = std::make_shared<FirebaseCredentialsProvider>(self.app, auth);
101105

106+
auto firebaseMetadataProvider = absl::make_unique<FirebaseMetadataProviderApple>(self.app);
107+
102108
model::DatabaseId databaseID{util::MakeString(projectID), util::MakeString(database)};
103109
std::string persistenceKey = util::MakeString(self.app.name);
104110
firestore = [[FIRFirestore alloc] initWithDatabaseID:std::move(databaseID)
105111
persistenceKey:std::move(persistenceKey)
106112
credentialsProvider:std::move(credentialsProvider)
107113
workerQueue:std::move(workerQueue)
114+
firebaseMetadataProvider:std::move(firebaseMetadataProvider)
108115
firebaseApp:self.app
109116
instanceRegistry:self];
110117
_instances[key] = firestore;

Firestore/core/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ if(APPLE)
210210
core_sources APPEND
211211
src/auth/firebase_credentials_provider_apple.*
212212
src/remote/connectivity_monitor_apple.mm
213+
src/remote/firebase_metadata_provider_apple.mm
213214
)
214215
endif()
215216

0 commit comments

Comments
 (0)