Skip to content

Commit ccd4d10

Browse files
author
Dev Patel
committed
refactor: use rnsandbox namespace for shared C++ classes
1 parent 19333ba commit ccd4d10

4 files changed

Lines changed: 69 additions & 31 deletions

File tree

packages/react-native-sandbox/ios/SandboxDelegateWrapper.mm

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
#include "SandboxDelegateWrapper.h"
22
#import "SandboxReactNativeDelegate.h"
33

4-
namespace facebook {
5-
namespace react {
4+
namespace rnsandbox {
65

76
SandboxDelegateWrapper::SandboxDelegateWrapper(SandboxReactNativeDelegate *delegate) : delegate_(delegate)
87
{
@@ -47,5 +46,4 @@
4746
[delegate_ setAllowedTurboModules:modules];
4847
}
4948

50-
} // namespace react
51-
} // namespace facebook
49+
} // namespace rnsandbox

packages/react-native-sandbox/ios/SandboxReactNativeDelegate.mm

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ - (void)setOrigin:(std::string)origin
123123

124124
// Unregister old origin if it exists
125125
if (!_origin.empty()) {
126-
auto &registry = SandboxRegistry::getInstance();
126+
auto &registry = rnsandbox::SandboxRegistry::getInstance();
127127
registry.unregister(_origin);
128128
}
129129

@@ -132,8 +132,8 @@ - (void)setOrigin:(std::string)origin
132132

133133
// Register new origin if it's not empty
134134
if (!_origin.empty()) {
135-
auto &registry = SandboxRegistry::getInstance();
136-
auto wrapper = std::make_shared<SandboxDelegateWrapper>(self);
135+
auto &registry = rnsandbox::SandboxRegistry::getInstance();
136+
auto wrapper = std::make_shared<rnsandbox::SandboxDelegateWrapper>(self);
137137
registry.registerSandbox(_origin, wrapper, _allowedOrigins);
138138
}
139139
}
@@ -149,8 +149,8 @@ - (void)setAllowedOrigins:(std::set<std::string>)allowedOrigins
149149

150150
// Re-register with new allowedOrigins if origin is set
151151
if (!_origin.empty()) {
152-
auto &registry = SandboxRegistry::getInstance();
153-
auto wrapper = std::make_shared<SandboxDelegateWrapper>(self);
152+
auto &registry = rnsandbox::SandboxRegistry::getInstance();
153+
auto wrapper = std::make_shared<rnsandbox::SandboxDelegateWrapper>(self);
154154
registry.registerSandbox(_origin, wrapper, _allowedOrigins);
155155
}
156156
}
@@ -163,7 +163,7 @@ - (void)setAllowedTurboModules:(std::set<std::string>)allowedTurboModules
163163
- (void)dealloc
164164
{
165165
if (!_origin.empty()) {
166-
auto &registry = SandboxRegistry::getInstance();
166+
auto &registry = rnsandbox::SandboxRegistry::getInstance();
167167
registry.unregister(_origin);
168168
} else {
169169
[self cleanupResources];
@@ -238,7 +238,7 @@ - (void)postMessage:(const std::string &)message
238238

239239
- (bool)routeMessage:(const std::string &)message toSandbox:(const std::string &)targetId
240240
{
241-
auto &registry = SandboxRegistry::getInstance();
241+
auto &registry = rnsandbox::SandboxRegistry::getInstance();
242242
auto target = registry.find(targetId);
243243
if (!target) {
244244
return false;
@@ -302,7 +302,7 @@ - (void)hostDidStart:(RCTHost *)host
302302
return [super getTurboModule:name jsInvoker:jsInvoker];
303303
} else {
304304
// Return C++ stub instead of nullptr
305-
return std::make_shared<facebook::react::StubTurboModuleCxx>(name, jsInvoker);
305+
return std::make_shared<rnsandbox::StubTurboModuleCxx>(name, jsInvoker);
306306
}
307307
}
308308

packages/react-native-sandbox/tests/MockSandboxDelegate.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66

77
#include <ISandboxDelegate.h>
88

9-
namespace facebook {
10-
namespace react {
9+
namespace rnsandbox {
1110

1211
class MockSandboxDelegate : public ISandboxDelegate {
1312
public:
@@ -30,5 +29,4 @@ class MockSandboxDelegate : public ISandboxDelegate {
3029
(override));
3130
};
3231

33-
} // namespace react
34-
} // namespace facebook
32+
} // namespace rnsandbox

packages/react-native-sandbox/tests/SandboxRegistryTest.cpp

Lines changed: 57 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
#include <fmt/format.h>
21
#include <gmock/gmock.h>
32
#include <gtest/gtest.h>
43
#include <chrono>
@@ -10,7 +9,7 @@
109

1110
#include "MockSandboxDelegate.h"
1211

13-
using namespace facebook::react;
12+
using namespace rnsandbox;
1413
using ::testing::_;
1514
using ::testing::Return;
1615
using ::testing::StrictMock;
@@ -82,23 +81,66 @@ TEST_F(SandboxRegistryTest, EmptyAllowedOrigins) {
8281
EXPECT_FALSE(registry.isPermittedFrom("test-origin", "any-origin"));
8382
}
8483

85-
TEST_F(SandboxRegistryTest, OverwriteExistingSandbox) {
84+
TEST_F(SandboxRegistryTest, MultipleDelegatesSameOrigin) {
8685
auto& registry = SandboxRegistry::getInstance();
87-
auto mockDelegate1 = std::make_shared<StrictMock<MockSandboxDelegate>>();
88-
auto mockDelegate2 = std::make_shared<StrictMock<MockSandboxDelegate>>();
86+
auto delegate1 = std::make_shared<StrictMock<MockSandboxDelegate>>();
87+
auto delegate2 = std::make_shared<StrictMock<MockSandboxDelegate>>();
8988

90-
std::set<std::string> allowedOrigins1 = {"allowed1"};
91-
std::set<std::string> allowedOrigins2 = {"allowed2"};
89+
std::set<std::string> allowedOrigins = {"other"};
90+
registry.registerSandbox("shared", delegate1, allowedOrigins);
91+
registry.registerSandbox("shared", delegate2, allowedOrigins);
9292

93-
registry.registerSandbox("test-origin", mockDelegate1, allowedOrigins1);
93+
// find returns the first
94+
EXPECT_EQ(registry.find("shared"), delegate1);
9495

95-
registry.registerSandbox("test-origin", mockDelegate2, allowedOrigins2);
96+
// findAll returns both
97+
auto all = registry.findAll("shared");
98+
EXPECT_EQ(all.size(), 2u);
99+
EXPECT_EQ(all[0], delegate1);
100+
EXPECT_EQ(all[1], delegate2);
101+
}
96102

97-
auto found = registry.find("test-origin");
98-
EXPECT_EQ(found, mockDelegate2);
103+
TEST_F(SandboxRegistryTest, UnregisterDelegateRemovesOnlyThatDelegate) {
104+
auto& registry = SandboxRegistry::getInstance();
105+
auto delegate1 = std::make_shared<StrictMock<MockSandboxDelegate>>();
106+
auto delegate2 = std::make_shared<StrictMock<MockSandboxDelegate>>();
99107

100-
EXPECT_FALSE(registry.isPermittedFrom("allowed2", "test-origin"));
101-
EXPECT_FALSE(registry.isPermittedFrom("allowed1", "test-origin"));
108+
std::set<std::string> allowedOrigins = {"other"};
109+
registry.registerSandbox("shared", delegate1, allowedOrigins);
110+
registry.registerSandbox("shared", delegate2, allowedOrigins);
111+
112+
registry.unregisterDelegate("shared", delegate1);
113+
114+
auto all = registry.findAll("shared");
115+
EXPECT_EQ(all.size(), 1u);
116+
EXPECT_EQ(all[0], delegate2);
117+
EXPECT_EQ(registry.find("shared"), delegate2);
118+
}
119+
120+
TEST_F(SandboxRegistryTest, UnregisterDelegateLastCleansUpOrigin) {
121+
auto& registry = SandboxRegistry::getInstance();
122+
auto delegate = std::make_shared<StrictMock<MockSandboxDelegate>>();
123+
124+
std::set<std::string> allowedOrigins = {"other"};
125+
registry.registerSandbox("solo", delegate, allowedOrigins);
126+
127+
registry.unregisterDelegate("solo", delegate);
128+
129+
EXPECT_EQ(registry.find("solo"), nullptr);
130+
EXPECT_TRUE(registry.findAll("solo").empty());
131+
EXPECT_FALSE(registry.isPermittedFrom("solo", "other"));
132+
}
133+
134+
TEST_F(SandboxRegistryTest, DuplicateRegistrationIgnored) {
135+
auto& registry = SandboxRegistry::getInstance();
136+
auto delegate = std::make_shared<StrictMock<MockSandboxDelegate>>();
137+
138+
std::set<std::string> allowedOrigins;
139+
registry.registerSandbox("dup", delegate, allowedOrigins);
140+
registry.registerSandbox("dup", delegate, allowedOrigins);
141+
142+
auto all = registry.findAll("dup");
143+
EXPECT_EQ(all.size(), 1u);
102144
}
103145

104146
TEST_F(SandboxRegistryTest, EmptyOriginHandling) {
@@ -167,7 +209,7 @@ TEST_F(SandboxRegistryTest, ThreadSafety) {
167209
EXPECT_TRUE(registry.isPermittedFrom(origin, "other_sandbox"));
168210
EXPECT_FALSE(registry.isPermittedFrom(origin, "blocked_sandbox"));
169211

170-
registry.unregister(origin);
212+
registry.unregisterDelegate(origin, mockDelegate);
171213

172214
auto notFound = registry.find(origin);
173215
EXPECT_EQ(notFound, nullptr);
@@ -180,4 +222,4 @@ TEST_F(SandboxRegistryTest, ThreadSafety) {
180222
EXPECT_EQ(status, std::future_status::ready)
181223
<< "Thread safety test timed out after 5 seconds";
182224
}
183-
}
225+
}

0 commit comments

Comments
 (0)