diff --git a/ReactCommon/cxxreact/CxxMessageQueue.h b/ReactCommon/cxxreact/CxxMessageQueue.h index aac28cd01..4d44bbe7c 100644 --- a/ReactCommon/cxxreact/CxxMessageQueue.h +++ b/ReactCommon/cxxreact/CxxMessageQueue.h @@ -2,14 +2,14 @@ #pragma once -#include "MessageQueueThread.h" - #include -#include #include +#include +#include #include #include -#include + +#include namespace facebook { namespace react { diff --git a/ReactCommon/cxxreact/CxxModule.h b/ReactCommon/cxxreact/CxxModule.h index 55b79f10c..0b420b01f 100644 --- a/ReactCommon/cxxreact/CxxModule.h +++ b/ReactCommon/cxxreact/CxxModule.h @@ -13,6 +13,10 @@ using namespace std::placeholders; +namespace facebook { namespace react { + class Instance; +}} + namespace facebook { namespace xplat { namespace module { /** @@ -157,6 +161,26 @@ public: * @return a list of methods this module exports to JS. */ virtual auto getMethods() -> std::vector = 0; + + /** + * Called during the construction of CxxNativeModule. + */ + void setInstance(std::weak_ptr instance) { + instance_ = instance; + } + + /** + * @return a weak_ptr to the current instance of the bridge. + * When used with CxxNativeModule, this gives Cxx modules access to functions + * such as `callJSFunction`, allowing them to communicate back to JS outside + * of the regular callbacks. + */ + std::weak_ptr getInstance() { + return instance_; + } + +private: + std::weak_ptr instance_; }; }}} diff --git a/ReactCommon/cxxreact/CxxNativeModule.cpp b/ReactCommon/cxxreact/CxxNativeModule.cpp index b8a2b7719..f73cd3000 100644 --- a/ReactCommon/cxxreact/CxxNativeModule.cpp +++ b/ReactCommon/cxxreact/CxxNativeModule.cpp @@ -50,7 +50,9 @@ CxxNativeModule::CxxNativeModule(std::weak_ptr instance, std::unique_ptr module) : instance_(instance) , module_(std::move(module)) - , methods_(module_->getMethods()) {} + , methods_(module_->getMethods()) { + module_->setInstance(instance); + } std::string CxxNativeModule::getName() { return module_->getName(); diff --git a/ReactCommon/cxxreact/CxxNativeModule.h b/ReactCommon/cxxreact/CxxNativeModule.h index 6f6b939a1..308d004bb 100644 --- a/ReactCommon/cxxreact/CxxNativeModule.h +++ b/ReactCommon/cxxreact/CxxNativeModule.h @@ -2,9 +2,8 @@ #pragma once -#include "NativeModule.h" - #include +#include namespace facebook { namespace react { diff --git a/ReactCommon/cxxreact/Executor.h b/ReactCommon/cxxreact/Executor.h index c7b60a9d3..a3c3cdd57 100644 --- a/ReactCommon/cxxreact/Executor.h +++ b/ReactCommon/cxxreact/Executor.h @@ -9,12 +9,11 @@ #include #include +#include #include #include #include -#include "JSModulesUnbundle.h" - #define RN_EXPORT __attribute__((visibility("default"))) namespace facebook { diff --git a/ReactCommon/cxxreact/ExecutorToken.h b/ReactCommon/cxxreact/ExecutorToken.h index a630e90d3..d3be5aafe 100644 --- a/ReactCommon/cxxreact/ExecutorToken.h +++ b/ReactCommon/cxxreact/ExecutorToken.h @@ -2,7 +2,7 @@ #pragma once -#include "Executor.h" +#include namespace facebook { namespace react { diff --git a/ReactCommon/cxxreact/ExecutorTokenFactory.h b/ReactCommon/cxxreact/ExecutorTokenFactory.h index 5d2d42179..72889a3ee 100644 --- a/ReactCommon/cxxreact/ExecutorTokenFactory.h +++ b/ReactCommon/cxxreact/ExecutorTokenFactory.h @@ -2,8 +2,8 @@ #pragma once -#include "ExecutorToken.h" -#include "Executor.h" +#include +#include namespace facebook { namespace react { diff --git a/ReactCommon/cxxreact/Instance.h b/ReactCommon/cxxreact/Instance.h index 39a132d65..385d22e3d 100644 --- a/ReactCommon/cxxreact/Instance.h +++ b/ReactCommon/cxxreact/Instance.h @@ -4,12 +4,11 @@ #include +#include +#include +#include #include -#include "NativeToJsBridge.h" -#include "ModuleRegistry.h" -#include "NativeModule.h" - namespace facebook { namespace react { diff --git a/ReactCommon/cxxreact/JSCExecutor.h b/ReactCommon/cxxreact/JSCExecutor.h index 25bccb457..7ea8cfa57 100644 --- a/ReactCommon/cxxreact/JSCExecutor.h +++ b/ReactCommon/cxxreact/JSCExecutor.h @@ -6,17 +6,15 @@ #include #include -#include +#include +#include +#include #include - -#include +#include #include +#include #include -#include "Executor.h" -#include "ExecutorToken.h" -#include "JSCNativeModules.h" - namespace facebook { namespace react { diff --git a/ReactCommon/cxxreact/JSCNativeModules.h b/ReactCommon/cxxreact/JSCNativeModules.h index 08b623378..38b2c1d30 100644 --- a/ReactCommon/cxxreact/JSCNativeModules.h +++ b/ReactCommon/cxxreact/JSCNativeModules.h @@ -2,15 +2,13 @@ #pragma once -#include - #include #include +#include +#include #include -#include "ModuleRegistry.h" - namespace facebook { namespace react { diff --git a/ReactCommon/cxxreact/JSCUtils.h b/ReactCommon/cxxreact/JSCUtils.h index e85b5564f..ca40eb3e8 100644 --- a/ReactCommon/cxxreact/JSCUtils.h +++ b/ReactCommon/cxxreact/JSCUtils.h @@ -2,10 +2,9 @@ #pragma once +#include #include -#include "Executor.h" - namespace facebook { namespace react { diff --git a/ReactCommon/cxxreact/JSIndexedRAMBundle.h b/ReactCommon/cxxreact/JSIndexedRAMBundle.h index d243e6f70..54df3eb10 100644 --- a/ReactCommon/cxxreact/JSIndexedRAMBundle.h +++ b/ReactCommon/cxxreact/JSIndexedRAMBundle.h @@ -5,8 +5,8 @@ #include #include -#include "Executor.h" -#include "JSBundleType.h" +#include +#include namespace facebook { namespace react { diff --git a/ReactCommon/cxxreact/JsArgumentHelpers.h b/ReactCommon/cxxreact/JsArgumentHelpers.h index eec92bee7..a66c40167 100644 --- a/ReactCommon/cxxreact/JsArgumentHelpers.h +++ b/ReactCommon/cxxreact/JsArgumentHelpers.h @@ -2,12 +2,12 @@ #pragma once -#include -#include - #include #include +#include +#include + // When building a cross-platform module for React Native, arguments passed // from JS are represented as a folly::dynamic. This class provides helpers to // extract arguments from the folly::dynamic to concrete types usable by @@ -103,4 +103,4 @@ inline std::string jsArgAsString(const folly::dynamic& args, size_t n) { }} -#include "JsArgumentHelpers-inl.h" +#include diff --git a/ReactCommon/cxxreact/ModuleRegistry.h b/ReactCommon/cxxreact/ModuleRegistry.h index bac11edf4..ef19d28a6 100644 --- a/ReactCommon/cxxreact/ModuleRegistry.h +++ b/ReactCommon/cxxreact/ModuleRegistry.h @@ -5,11 +5,10 @@ #include #include -#include +#include +#include #include - -#include "ExecutorToken.h" -#include "NativeModule.h" +#include namespace facebook { namespace react { diff --git a/ReactCommon/cxxreact/NativeModule.h b/ReactCommon/cxxreact/NativeModule.h index cbc82aa46..a1bb97716 100644 --- a/ReactCommon/cxxreact/NativeModule.h +++ b/ReactCommon/cxxreact/NativeModule.h @@ -5,10 +5,9 @@ #include #include +#include #include -#include "ExecutorToken.h" - namespace facebook { namespace react { diff --git a/ReactCommon/cxxreact/NativeToJsBridge.h b/ReactCommon/cxxreact/NativeToJsBridge.h index b8d1c4b3f..a5ad50914 100644 --- a/ReactCommon/cxxreact/NativeToJsBridge.h +++ b/ReactCommon/cxxreact/NativeToJsBridge.h @@ -7,18 +7,16 @@ #include #include +#include +#include +#include +#include +#include +#include +#include #include - #include -#include "Executor.h" -#include "ExecutorToken.h" -#include "JSCExecutor.h" -#include "JSModulesUnbundle.h" -#include "MessageQueueThread.h" -#include "MethodCall.h" -#include "NativeModule.h" - namespace folly { struct dynamic; diff --git a/ReactCommon/cxxreact/Platform.h b/ReactCommon/cxxreact/Platform.h index 784f178d3..39d26e726 100644 --- a/ReactCommon/cxxreact/Platform.h +++ b/ReactCommon/cxxreact/Platform.h @@ -6,11 +6,10 @@ #include #include +#include +#include #include -#include "Executor.h" -#include "MessageQueueThread.h" - namespace facebook { namespace react {