Skip to content

Commit 36fc7ba

Browse files
authored
[0.72] Implement BlobCollector (#12275)
* Implement BlobCollector (#12269) * Implement BlobCollector * Change files * clang format * Remove change files * Change files
1 parent eb9cc55 commit 36fc7ba

File tree

6 files changed

+80
-0
lines changed

6 files changed

+80
-0
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "patch",
3+
"comment": "Implement BlobCollector (#12269)",
4+
"packageName": "react-native-windows",
5+
"email": "[email protected]",
6+
"dependentChangeType": "patch"
7+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT License.
3+
4+
#include "BlobCollector.h"
5+
6+
using std::string;
7+
8+
namespace Microsoft::React {
9+
10+
using Networking::IBlobResource;
11+
12+
BlobCollector::BlobCollector(string blobId, std::shared_ptr<IBlobResource> resource) noexcept
13+
: m_blobId{blobId}, m_weakResource{std::weak_ptr<IBlobResource>(resource)} {}
14+
15+
BlobCollector::~BlobCollector() noexcept {
16+
if (auto rc = m_weakResource.lock()) {
17+
rc->Release(std::move(m_blobId));
18+
}
19+
}
20+
21+
} // namespace Microsoft::React

vnext/Shared/Modules/BlobCollector.h

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT License.
3+
4+
#pragma once
5+
6+
#include <Networking/IBlobResource.h>
7+
8+
// JSI
9+
#include <jsi/jsi.h>
10+
11+
namespace Microsoft::React {
12+
13+
class JSI_EXPORT BlobCollector : public facebook::jsi::HostObject {
14+
std::string m_blobId;
15+
std::weak_ptr<Networking::IBlobResource> m_weakResource;
16+
17+
public:
18+
BlobCollector(std::string blobId, std::shared_ptr<Networking::IBlobResource> resource) noexcept;
19+
20+
~BlobCollector() noexcept;
21+
};
22+
23+
} // namespace Microsoft::React

vnext/Shared/Modules/BlobModule.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
#include "BlobModule.h"
55

66
#include <CreateModules.h>
7+
#include <JSI/JsiApiContext.h>
78
#include <Modules/CxxModuleUtilities.h>
9+
#include "BlobCollector.h"
810

911
// React Native
1012
#include <cxxreact/JsArgumentHelpers.h>
@@ -38,6 +40,23 @@ void BlobTurboModule::Initialize(msrn::ReactContext const &reactContext) noexcep
3840
m_resource->Callbacks().OnError = [&reactContext](string &&errorText) {
3941
Modules::SendEvent(reactContext, L"blobFailed", {errorText});
4042
};
43+
44+
namespace jsi = facebook::jsi;
45+
msrn::ExecuteJsi(reactContext, [resource = m_resource](jsi::Runtime &runtime) {
46+
runtime.global().setProperty(
47+
runtime,
48+
"__blobCollectorProvider",
49+
jsi::Function::createFromHostFunction(
50+
runtime,
51+
jsi::PropNameID::forAscii(runtime, "__blobCollectorProvider"),
52+
1,
53+
[resource](jsi::Runtime &rt, const jsi::Value &thisVal, const jsi::Value *args, size_t count) {
54+
auto blobId = args[0].asString(rt).utf8(rt);
55+
auto collector = std::make_shared<BlobCollector>(blobId, resource);
56+
57+
return jsi::Object::createFromHostObject(rt, collector);
58+
}));
59+
});
4160
}
4261

4362
ReactNativeSpecs::BlobModuleSpec_Constants BlobTurboModule::GetConstants() noexcept {

vnext/Shared/Shared.vcxitems

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@
167167
<ClCompile Include="$(MSBuildThisFileDirectory)LayoutAnimation.cpp" />
168168
<ClCompile Include="$(MSBuildThisFileDirectory)Logging.cpp" />
169169
<ClCompile Include="$(MSBuildThisFileDirectory)MemoryMappedBuffer.cpp" />
170+
<ClCompile Include="$(MSBuildThisFileDirectory)Modules\BlobCollector.cpp" />
170171
<ClCompile Include="$(MSBuildThisFileDirectory)Modules\BlobModule.cpp" />
171172
<ClCompile Include="$(MSBuildThisFileDirectory)Modules\CxxModuleUtilities.cpp" />
172173
<ClCompile Include="$(MSBuildThisFileDirectory)Modules\ExceptionsManagerModule.cpp" />
@@ -301,6 +302,7 @@
301302
<ClInclude Include="$(MSBuildThisFileDirectory)JSI\V8RuntimeHolder.h" />
302303
<ClInclude Include="$(MSBuildThisFileDirectory)JSI\RuntimeHolder.h" />
303304
<ClInclude Include="$(MSBuildThisFileDirectory)JSI\ScriptStore.h" />
305+
<ClInclude Include="$(MSBuildThisFileDirectory)Modules\BlobCollector.h" />
304306
<ClInclude Include="$(MSBuildThisFileDirectory)Modules\BlobModule.h" />
305307
<ClInclude Include="$(MSBuildThisFileDirectory)Modules\CxxModuleUtilities.h" />
306308
<ClInclude Include="$(MSBuildThisFileDirectory)Modules\FileReaderModule.h" />

vnext/Shared/Shared.vcxitems.filters

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,11 @@
270270
<ClCompile Include="$(MSBuildThisFileDirectory)Networking\DefaultBlobResource.cpp">
271271
<Filter>Source Files\Networking</Filter>
272272
</ClCompile>
273+
<ClCompile Include="$(MSBuildThisFileDirectory)..\Microsoft.ReactNative\Fabric\platform\react\renderer\components\view\HostPlatformViewProps.cpp" />
274+
<ClCompile Include="$(MSBuildThisFileDirectory)..\Microsoft.ReactNative\Fabric\platform\react\renderer\components\view\HostPlatformViewEventEmitter.cpp" />
275+
<ClCompile Include="$(MSBuildThisFileDirectory)Modules\BlobCollector.cpp">
276+
<Filter>Source Files\Modules</Filter>
277+
</ClCompile>
273278
</ItemGroup>
274279
<ItemGroup>
275280
<Filter Include="Source Files">
@@ -741,6 +746,9 @@
741746
<ClInclude Include="$(MSBuildThisFileDirectory)JSI\V8RuntimeHolder.h" />
742747
<ClInclude Include="$(MSBuildThisFileDirectory)SafeLoadLibrary.h" />
743748
<ClInclude Include="$(MSBuildThisFileDirectory)V8JSIRuntimeHolder.h" />
749+
<ClInclude Include="$(MSBuildThisFileDirectory)Modules\BlobCollector.h">
750+
<Filter>Header Files\Modules</Filter>
751+
</ClInclude>
744752
</ItemGroup>
745753
<ItemGroup>
746754
<None Include="$(MSBuildThisFileDirectory)tracing\rnw.wprp">

0 commit comments

Comments
 (0)