Skip to content

Commit ce7c217

Browse files
authored
[0.71] Implement BlobCollector (#12276)
* Implement BlobCollector (#12269) * Implement BlobCollector * Change files * clang format * Remove change files * Change files
1 parent 7f2e4a1 commit ce7c217

File tree

6 files changed

+78
-0
lines changed

6 files changed

+78
-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
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
@@ -45,6 +45,7 @@
4545
<ClCompile Include="$(MSBuildThisFileDirectory)Modules\AsyncStorageModuleWin32.cpp">
4646
<ExcludedFromBuild Condition="'$(ApplicationType)' == ''">true</ExcludedFromBuild>
4747
</ClCompile>
48+
<ClCompile Include="$(MSBuildThisFileDirectory)Modules\BlobCollector.cpp" />
4849
<ClCompile Include="$(MSBuildThisFileDirectory)Modules\BlobModule.cpp" />
4950
<ClCompile Include="$(MSBuildThisFileDirectory)Modules\CxxModuleUtilities.cpp" />
5051
<ClCompile Include="$(MSBuildThisFileDirectory)Modules\ExceptionsManagerModule.cpp" />
@@ -99,6 +100,7 @@
99100
<ClInclude Include="$(MSBuildThisFileDirectory)JSI\V8RuntimeHolder.h" />
100101
<ClInclude Include="$(MSBuildThisFileDirectory)JSI\RuntimeHolder.h" />
101102
<ClInclude Include="$(MSBuildThisFileDirectory)JSI\ScriptStore.h" />
103+
<ClInclude Include="$(MSBuildThisFileDirectory)Modules\BlobCollector.h" />
102104
<ClInclude Include="$(MSBuildThisFileDirectory)Modules\BlobModule.h" />
103105
<ClInclude Include="$(MSBuildThisFileDirectory)Modules\CxxModuleUtilities.h" />
104106
<ClInclude Include="$(MSBuildThisFileDirectory)Modules\FileReaderModule.h" />

vnext/Shared/Shared.vcxitems.filters

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,9 @@
158158
<ClCompile Include="$(MSBuildThisFileDirectory)JSI\V8RuntimeHolder.cpp" />
159159
<ClCompile Include="$(MSBuildThisFileDirectory)SafeLoadLibrary.cpp" />
160160
<ClCompile Include="$(MSBuildThisFileDirectory)V8JSIRuntimeHolder.cpp" />
161+
<ClCompile Include="$(MSBuildThisFileDirectory)Modules\BlobCollector.cpp">
162+
<Filter>Source Files\Modules</Filter>
163+
</ClCompile>
161164
</ItemGroup>
162165
<ItemGroup>
163166
<Filter Include="Source Files">
@@ -487,6 +490,9 @@
487490
<ClInclude Include="$(MSBuildThisFileDirectory)JSI\V8RuntimeHolder.h" />
488491
<ClInclude Include="$(MSBuildThisFileDirectory)SafeLoadLibrary.h" />
489492
<ClInclude Include="$(MSBuildThisFileDirectory)V8JSIRuntimeHolder.h" />
493+
<ClInclude Include="$(MSBuildThisFileDirectory)Modules\BlobCollector.h">
494+
<Filter>Header Files\Modules</Filter>
495+
</ClInclude>
490496
</ItemGroup>
491497
<ItemGroup>
492498
<None Include="$(MSBuildThisFileDirectory)tracing\rnw.wprp">

0 commit comments

Comments
 (0)