Skip to content

Commit bb669e9

Browse files
committed
Address feedback
1 parent 314d0eb commit bb669e9

11 files changed

Lines changed: 87 additions & 40 deletions

remote_config/src/android/remote_config_android.cc

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ static jobject ConfigKeyValueVariantArrayToHashMap(
392392

393393
// Convert a std::map<std::string, Variant> into a Java CustomSignals object
394394
// using CustomSignals.Builder to populate String, Long, and Double signal
395-
// entries.
395+
// entries, or null values to clear signals.
396396
static jobject CustomSignalsFromMap(JNIEnv* env,
397397
const std::map<std::string, Variant>& map) {
398398
jobject builder = env->NewObject(custom_signals_builder::GetClass(),
@@ -403,7 +403,13 @@ static jobject CustomSignalsFromMap(JNIEnv* env,
403403
for (const auto& kv : map) {
404404
jstring key = env->NewStringUTF(kv.first.c_str());
405405
jobject result_builder = nullptr;
406-
if (kv.second.is_string()) {
406+
if (kv.second.is_null()) {
407+
result_builder =
408+
env->CallObjectMethod(builder,
409+
custom_signals_builder::GetMethodId(
410+
custom_signals_builder::kPutString),
411+
key, nullptr);
412+
} else if (kv.second.is_string()) {
407413
jstring str_val = env->NewStringUTF(kv.second.string_value());
408414
result_builder =
409415
env->CallObjectMethod(builder,

remote_config/src/desktop/metadata.cc

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include <limits>
2121
#include <map>
2222
#include <string>
23+
#include <vector>
2324

2425
#include "flatbuffers/flexbuffers.h"
2526
#include "remote_config/src/include/firebase/remote_config.h"
@@ -56,7 +57,15 @@ std::string RemoteConfigMetadata::Serialize() const {
5657

5758
fbb.Map("custom_signals", [&]() {
5859
for (const auto& signal : custom_signals_) {
59-
fbb.String(signal.first.c_str(), signal.second);
60+
const std::string& key = signal.first;
61+
const Variant& val = signal.second;
62+
if (val.is_string()) {
63+
fbb.String(key.c_str(), val.string_value());
64+
} else if (val.is_int64()) {
65+
fbb.Int(key.c_str(), val.int64_value());
66+
} else if (val.is_double()) {
67+
fbb.Double(key.c_str(), val.double_value());
68+
}
6069
}
6170
});
6271
});
@@ -107,7 +116,19 @@ void RemoteConfigMetadata::Deserialize(const std::string& buffer) {
107116

108117
custom_signals_.clear();
109118
flexbuffers::Map custom_signals = struct_map["custom_signals"].AsMap();
110-
DeserializeMap(&custom_signals_, custom_signals);
119+
for (int i = 0, n = custom_signals.size(); i < n; ++i) {
120+
const char* key_str = custom_signals.Keys()[i].AsKey();
121+
if (!key_str) continue;
122+
flexbuffers::Reference val_ref = custom_signals.Values()[i];
123+
if (val_ref.IsString()) {
124+
custom_signals_[key_str] =
125+
Variant(std::string(val_ref.AsString().c_str()));
126+
} else if (val_ref.IsInt()) {
127+
custom_signals_[key_str] = Variant(val_ref.AsInt64());
128+
} else if (val_ref.IsFloat()) {
129+
custom_signals_[key_str] = Variant(val_ref.AsDouble());
130+
}
131+
}
111132
}
112133

113134
void RemoteConfigMetadata::AddSetting(const ConfigSetting& setting,

remote_config/src/desktop/metadata.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <map>
1919
#include <string>
2020

21+
#include "firebase/variant.h"
2122
#include "flatbuffers/flexbuffers.h"
2223
#include "remote_config/src/include/firebase/remote_config.h"
2324

@@ -27,7 +28,7 @@ namespace internal {
2728

2829
typedef std::map<std::string, std::string> MetaDigestMap;
2930
typedef std::map<ConfigSetting, std::string> MetaSettingsMap;
30-
typedef std::map<std::string, std::string> MetaCustomSignalsMap;
31+
typedef std::map<std::string, Variant> MetaCustomSignalsMap;
3132

3233
// Contains different data about Remote Config Client.
3334
//

remote_config/src/desktop/remote_config_desktop.cc

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -274,22 +274,16 @@ Future<void> RemoteConfigInternal::SetCustomSignals(
274274

275275
// Merge incoming signals with existing metadata:
276276
// - Null variants remove the existing signal entry.
277-
// - Numeric and string types are converted and stored as string
278-
// representations.
277+
// - Non-null variants (String, Int64, Double) are stored with their
278+
// original type preserved.
279279
for (const auto& kv : custom_signals) {
280280
const std::string& key = kv.first;
281281
const Variant& value = kv.second;
282282

283283
if (value.is_null()) {
284284
updated_signals.erase(key);
285-
} else if (value.is_string()) {
286-
updated_signals[key] = value.string_value();
287-
} else if (value.is_int64()) {
288-
updated_signals[key] = std::to_string(value.int64_value());
289-
} else if (value.is_double()) {
290-
std::ostringstream ss;
291-
ss << value.double_value();
292-
updated_signals[key] = ss.str();
285+
} else {
286+
updated_signals[key] = value;
293287
}
294288
}
295289

remote_config/src/desktop/remote_config_request.cc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616

1717
#include "remote_config/src/desktop/remote_config_request.h"
1818

19+
#include <map>
20+
#include <string>
21+
1922
#include "app/src/app_common.h"
2023
#include "app/src/assert.h"
2124
#include "app/src/variant_util.h"
@@ -43,7 +46,7 @@ void RemoteConfigRequest::UpdatePostFields() {
4346
if (!custom_signals_.empty()) {
4447
std::map<Variant, Variant> variant_map;
4548
for (const auto& kv : custom_signals_) {
46-
variant_map[Variant(kv.first)] = Variant(kv.second);
49+
variant_map[Variant(kv.first)] = kv.second;
4750
}
4851
std::string custom_signals_json = util::VariantToJson(variant_map);
4952

remote_config/src/desktop/remote_config_request.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717
#ifndef FIREBASE_REMOTE_CONFIG_SRC_DESKTOP_REMOTE_CONFIG_REQUEST_H_
1818
#define FIREBASE_REMOTE_CONFIG_SRC_DESKTOP_REMOTE_CONFIG_REQUEST_H_
1919

20+
#include <map>
21+
#include <string>
22+
#include <utility>
23+
2024
#include "app/rest/request_json.h"
2125
#include "remote_config/request_generated.h"
2226
#include "remote_config/request_resource.h"
@@ -87,11 +91,11 @@ class RemoteConfigRequest
8791
std::move(analytics_user_properties);
8892
}
8993

90-
void SetCustomSignals(std::map<std::string, std::string> custom_signals) {
94+
void SetCustomSignals(std::map<std::string, Variant> custom_signals) {
9195
custom_signals_ = std::move(custom_signals);
9296
}
9397

94-
const std::map<std::string, std::string>& custom_signals() const {
98+
const std::map<std::string, Variant>& custom_signals() const {
9599
return custom_signals_;
96100
}
97101

@@ -101,7 +105,7 @@ class RemoteConfigRequest
101105
void UpdatePostFields() override;
102106

103107
private:
104-
std::map<std::string, std::string> custom_signals_;
108+
std::map<std::string, Variant> custom_signals_;
105109
};
106110

107111
} // namespace internal

remote_config/src/ios/remote_config_ios.mm

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -407,11 +407,17 @@ static int64_t FutureCompleteWithError(NSError *error, ReferenceCountedFutureImp
407407
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:custom_signals.size()];
408408
for (const auto& pair : custom_signals) {
409409
const char* key = pair.first.c_str();
410-
id value = VariantToNSObject(pair.second);
411-
if (value) {
412-
dict[@(key)] = value;
410+
if (pair.second.is_null()) {
411+
dict[@(key)] = [NSNull null];
413412
} else {
414-
LogError("Remote Config: Invalid Variant type for SetCustomSignals() key %s", key);
413+
id value = VariantToNSObject(pair.second);
414+
if (value) {
415+
dict[@(key)] = value;
416+
} else {
417+
LogError(
418+
"Remote Config: Invalid Variant type for SetCustomSignals() key %s",
419+
key);
420+
}
415421
}
416422
}
417423
[impl() setCustomSignals:dict

remote_config/tests/desktop/metadata_test.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ TEST(RemoteConfigMetadataTest, Serialization) {
4040
MetaDigestMap({{"namespace1", "digest1"}, {"namespace2", "digest2"}}));
4141
remote_config_metadata.AddSetting(kConfigSettingDeveloperMode, "0");
4242
remote_config_metadata.set_custom_signals(
43-
MetaCustomSignalsMap({{"sig1", "val1"}, {"sig2", "123"}}));
43+
MetaCustomSignalsMap({{"sig_str", Variant("val1")},
44+
{"sig_int", Variant(123)},
45+
{"sig_double", Variant(45.6)}}));
4446

4547
std::string buffer = remote_config_metadata.Serialize();
4648
RemoteConfigMetadata new_remote_config_metadata;
@@ -102,7 +104,9 @@ TEST(RemoteConfigMetadataTest, SetAndGetCustomSignals) {
102104
RemoteConfigMetadata m;
103105
EXPECT_TRUE(m.custom_signals().empty());
104106

105-
MetaCustomSignalsMap signals = {{"key1", "val1"}, {"key2", "42"}};
107+
MetaCustomSignalsMap signals = {{"key_str", Variant("val1")},
108+
{"key_int", Variant(42)},
109+
{"key_double", Variant(3.14)}};
106110
m.set_custom_signals(signals);
107111
EXPECT_EQ(m.custom_signals(), signals);
108112
}

remote_config/tests/desktop/remote_config_desktop_test.cc

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -519,9 +519,9 @@ TEST_F(RemoteConfigDesktopTest, SetCustomSignals) {
519519
const MetaCustomSignalsMap& stored_signals =
520520
instance_->configs_.metadata.custom_signals();
521521
EXPECT_EQ(stored_signals.size(), 3);
522-
EXPECT_EQ(stored_signals.at("key_string"), "val");
523-
EXPECT_EQ(stored_signals.at("key_int"), "123");
524-
EXPECT_EQ(stored_signals.at("key_double"), "45.6");
522+
EXPECT_EQ(stored_signals.at("key_string"), Variant("val"));
523+
EXPECT_EQ(stored_signals.at("key_int"), Variant(123));
524+
EXPECT_EQ(stored_signals.at("key_double"), Variant(45.6));
525525
}
526526

527527
TEST_F(RemoteConfigDesktopTest, SetCustomSignalsMergeAndRemove) {
@@ -542,9 +542,9 @@ TEST_F(RemoteConfigDesktopTest, SetCustomSignalsMergeAndRemove) {
542542
const MetaCustomSignalsMap& stored_signals =
543543
instance_->configs_.metadata.custom_signals();
544544
EXPECT_EQ(stored_signals.size(), 3);
545-
EXPECT_EQ(stored_signals.at("key1"), "val1");
546-
EXPECT_EQ(stored_signals.at("key2"), "200");
547-
EXPECT_EQ(stored_signals.at("key4"), "new_val");
545+
EXPECT_EQ(stored_signals.at("key1"), Variant("val1"));
546+
EXPECT_EQ(stored_signals.at("key2"), Variant(200));
547+
EXPECT_EQ(stored_signals.at("key4"), Variant("new_val"));
548548
EXPECT_EQ(stored_signals.find("key3"), stored_signals.end());
549549
}
550550

@@ -591,8 +591,8 @@ TEST_F(RemoteConfigDesktopTest, SetCustomSignalsPersistence) {
591591
const MetaCustomSignalsMap& loaded_signals =
592592
new_instance.configs_.metadata.custom_signals();
593593
EXPECT_EQ(loaded_signals.size(), 2);
594-
EXPECT_EQ(loaded_signals.at("persisted_key"), "persisted_val");
595-
EXPECT_EQ(loaded_signals.at("persisted_num"), "999");
594+
EXPECT_EQ(loaded_signals.at("persisted_key"), Variant("persisted_val"));
595+
EXPECT_EQ(loaded_signals.at("persisted_num"), Variant(999));
596596
}
597597

598598
} // namespace internal

remote_config/tests/desktop/rest_test.cc

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -185,18 +185,16 @@ TEST_F(RemoteConfigRESTTest, SetupRESTRequest) {
185185
std::string locale = firebase::internal::GetLocale();
186186
EXPECT_EQ(rest.rc_request_.application_data_->languageCode, locale);
187187

188-
if (locale.length() > 0) {
189-
EXPECT_EQ(rest.rc_request_.application_data_->countryCode,
190-
locale.substr(0, 2));
191-
}
192-
188+
// TODO(cynthiajiang) Set Country code and verify installations id and token.
193189
// TODO(cynthiajiang) verify installations id and token.
194190
}
195191

196192
TEST_F(RemoteConfigRESTTest, SetupRESTRequestWithCustomSignals) {
197193
RemoteConfigMetadata metadata = configs_.metadata;
198194
metadata.set_custom_signals(
199-
MetaCustomSignalsMap({{"sig_str", "hello"}, {"sig_int", "42"}}));
195+
MetaCustomSignalsMap({{"sig_str", Variant("hello")},
196+
{"sig_int", Variant(42)},
197+
{"sig_double", Variant(3.14)}}));
200198
LayeredConfigs configs_with_signals(configs_.fetched, configs_.active,
201199
configs_.defaults, metadata);
202200

@@ -207,7 +205,8 @@ TEST_F(RemoteConfigRESTTest, SetupRESTRequestWithCustomSignals) {
207205
EXPECT_TRUE(rest.rc_request_.ReadBodyIntoString(&body));
208206
EXPECT_NE(body.find("\"custom_signals\":"), std::string::npos);
209207
EXPECT_NE(body.find("\"sig_str\":\"hello\""), std::string::npos);
210-
EXPECT_NE(body.find("\"sig_int\":\"42\""), std::string::npos);
208+
EXPECT_NE(body.find("\"sig_int\":42"), std::string::npos);
209+
EXPECT_NE(body.find("\"sig_double\":3.14"), std::string::npos);
211210
}
212211

213212
// Verify the rest request with mock project will return code 404

0 commit comments

Comments
 (0)