2015-06-25 12:37:22 +00:00
|
|
|
/**
|
|
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* This source code is licensed under the BSD-style license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
|
|
*
|
|
|
|
* Utility class to provide the component owner hierarchy to native code for
|
|
|
|
* debugging purposes.
|
|
|
|
*
|
|
|
|
* @providesModule RCTDebugComponentOwnership
|
|
|
|
* @flow
|
|
|
|
*/
|
|
|
|
|
|
|
|
'use strict';
|
|
|
|
|
2015-12-08 23:57:34 +00:00
|
|
|
var BatchedBridge = require('BatchedBridge');
|
2015-06-25 12:37:22 +00:00
|
|
|
var DebugComponentOwnershipModule = require('NativeModules').DebugComponentOwnershipModule;
|
|
|
|
var InspectorUtils = require('InspectorUtils');
|
|
|
|
var ReactNativeTagHandles = require('ReactNativeTagHandles');
|
|
|
|
|
|
|
|
function componentToString(component) {
|
|
|
|
return component.getName ? component.getName() : 'Unknown';
|
|
|
|
}
|
|
|
|
|
|
|
|
function getRootTagForTag(tag: number): ?number {
|
|
|
|
var rootNodeID = ReactNativeTagHandles.tagToRootNodeID[tag];
|
|
|
|
if (!rootNodeID) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
var rootID = ReactNativeTagHandles.getNativeTopRootIDFromNodeID(rootNodeID);
|
|
|
|
if (!rootID) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
return ReactNativeTagHandles.rootNodeIDToTag[rootID];
|
|
|
|
}
|
|
|
|
|
2015-12-08 23:57:34 +00:00
|
|
|
var RCTDebugComponentOwnership = {
|
2015-06-25 12:37:22 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Asynchronously returns the owner hierarchy as an array of strings. Request id is
|
|
|
|
* passed along to the native module so that the native module can identify the
|
|
|
|
* particular call instance.
|
|
|
|
*
|
|
|
|
* Example returned owner hierarchy: ['RootView', 'Dialog', 'TitleView', 'Text']
|
|
|
|
*/
|
|
|
|
getOwnerHierarchy: function(requestID: number, tag: number) {
|
|
|
|
var rootTag = getRootTagForTag(tag);
|
|
|
|
var instance = InspectorUtils.findInstanceByNativeTag(rootTag, tag);
|
|
|
|
var ownerHierarchy = instance ?
|
|
|
|
InspectorUtils.getOwnerHierarchy(instance).map(componentToString) :
|
|
|
|
null;
|
|
|
|
DebugComponentOwnershipModule.receiveOwnershipHierarchy(requestID, tag, ownerHierarchy);
|
|
|
|
},
|
|
|
|
};
|
2015-12-08 23:57:34 +00:00
|
|
|
|
|
|
|
BatchedBridge.registerCallableModule(
|
|
|
|
'RCTDebugComponentOwnership',
|
|
|
|
RCTDebugComponentOwnership
|
|
|
|
);
|
|
|
|
|
|
|
|
module.exports = RCTDebugComponentOwnership;
|