Support the scriptURLs observed on Android for asset source resolver

Reviewed By: frantic

Differential Revision: D3005791

fb-gh-sync-id: 99acb350c8c80ebe22687294a0069891686885fc
shipit-source-id: 99acb350c8c80ebe22687294a0069891686885fc
This commit is contained in:
Zahan Malkani 2016-03-05 22:42:14 -08:00 committed by Facebook Github Bot 8
parent ae11449516
commit 87245b2d40
2 changed files with 44 additions and 6 deletions

View File

@ -189,6 +189,34 @@ describe('resolveAssetSource', () => {
});
});
describe('bundle was loaded from raw file on Android', () => {
beforeEach(() => {
NativeModules.SourceCode.scriptURL =
'/sdcard/Path/To/Simulator/main.bundle';
Platform.OS = 'android';
});
it('uses sideloaded image', () => {
expectResolvesAsset({
__packager_asset: true,
fileSystemLocation: '/root/app/module/a',
httpServerLocation: '/assets/AwesomeModule/Subdir',
width: 100,
height: 200,
scales: [1],
hash: '5b6f00f',
name: '!@Logo#1_€',
type: 'png',
}, {
__packager_asset: true,
width: 100,
height: 200,
uri: 'file:///sdcard/Path/To/Simulator/drawable-mdpi/awesomemodule_subdir_logo1_.png',
scale: 1,
});
});
});
});
describe('resolveAssetSource.pickScale', () => {

View File

@ -47,12 +47,22 @@ function getDevServerURL() {
function getOfflinePath() {
if (_offlinePath === undefined) {
var scriptURL = SourceCode.scriptURL;
var match = scriptURL && scriptURL.match(/^file:\/\/(\/.*\/)/);
if (match) {
_offlinePath = match[1];
} else {
const scriptURL = SourceCode.scriptURL;
if (!scriptURL) {
// scriptURL is falsy, we have nothing to go on here
_offlinePath = '';
return _offlinePath;
}
if (scriptURL.startsWith('assets://')) {
// running from within assets, no offline path to use
_offlinePath = '';
return _offlinePath;
}
if (scriptURL.startsWith('file://')) {
// cut off the protocol
_offlinePath = scriptURL.substring(7, scriptURL.lastIndexOf('/') + 1);
} else {
_offlinePath = scriptURL.substring(0, scriptURL.lastIndexOf('/') + 1);
}
}