Skip to content

Commit a6e8c40

Browse files
committed
[#629]支持沙箱运行模式
1 parent 22d96ee commit a6e8c40

File tree

101 files changed

+6171
-2189
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

101 files changed

+6171
-2189
lines changed

core/plugins/android/features/share/src/main/java/org/hapjs/features/service/share/Share.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import android.graphics.Bitmap;
1212
import android.net.Uri;
1313
import android.os.Handler;
14+
import android.os.Looper;
1415
import android.os.Message;
1516
import android.text.TextUtils;
1617
import android.util.Log;
@@ -84,7 +85,7 @@ public class Share extends FeatureExtension {
8485

8586
private ShareAction mShareAction;
8687
private static final int MSG_ONLINE_SHARE = 0x01;
87-
private Handler mHandler = new Handler() {
88+
private Handler mHandler = new Handler(Looper.getMainLooper()) {
8889
@Override
8990
public void handleMessage(Message msg) {
9091
switch (msg.what) {

core/runtime/android/card-support/src/main/java/org/hapjs/card/support/impl/CardServiceWorker.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,11 @@
4141
import org.hapjs.logging.CardLogManager;
4242
import org.hapjs.model.AppInfo;
4343
import org.hapjs.render.jsruntime.JsThreadFactory;
44+
import org.hapjs.render.jsruntime.SandboxProvider;
45+
import org.hapjs.render.jsruntime.SandboxProviderImpl;
4446
import org.hapjs.render.jsruntime.module.ModuleBridge;
4547
import org.hapjs.runtime.HapEngine;
48+
import org.hapjs.runtime.ProviderManager;
4649
import org.hapjs.runtime.ResourceConfig;
4750
import org.hapjs.runtime.Runtime;
4851

@@ -54,6 +57,7 @@ public void init(Context context, String platform) {
5457
Log.i(TAG, "CardServiceWorker init, platform=" + platform);
5558
ResourceConfig.getInstance().init(context, platform);
5659
Runtime.setPlatform(platform);
60+
ProviderManager.getDefault().addProvider(SandboxProvider.NAME, new SandboxProviderImpl());
5761
Runtime.getInstance().onCreate(context);
5862
configBlacklist();
5963
JsThreadFactory.getInstance().preload(context);

core/runtime/android/features/src/main/java/org/hapjs/features/AbstractRequest.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -255,16 +255,12 @@ private RequestBody getSimplePostBody(Headers headers, Object objData, String pk
255255
String textParams = joinParams((SerializeObject) objData);
256256
return RequestBody.create(
257257
MediaType.parse(RequestHelper.CONTENT_TYPE_FORM_URLENCODED), textParams);
258-
} else if (objData instanceof ArrayBuffer) {
258+
} else if (objData instanceof byte[]) {
259259
if (TextUtils.isEmpty(contentType)) {
260260
contentType = RequestHelper.CONTENT_TYPE_OCTET_STREAM;
261261
}
262262

263-
//copy memory to heap
264-
V8ArrayBuffer v8ArrayBuffer = ((ArrayBuffer) objData).getV8ArrayBuffer();
265-
byte[] buffer = new byte[v8ArrayBuffer.remaining()];
266-
v8ArrayBuffer.get(buffer);
267-
return RequestBody.create(MediaType.parse(contentType), buffer);
263+
return RequestBody.create(MediaType.parse(contentType), (byte[]) objData);
268264
}
269265

270266
contentType =
@@ -440,10 +436,7 @@ private void parseData(Request request, SerializeObject result, okhttp3.Response
440436
}
441437
} else if (RESPONSE_TYPE_ARRAYBUFFER.equalsIgnoreCase(responseType)) {
442438
byte[] bytes = response.body().bytes();
443-
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(bytes.length);
444-
byteBuffer.put(bytes);
445-
byteBuffer.rewind();
446-
result.put(RESULT_KEY_DATA, byteBuffer);
439+
result.put(RESULT_KEY_DATA, bytes);
447440
} else if (RESPONSE_TYPE_FILE.equalsIgnoreCase(responseType)) {
448441
result.put(RESULT_KEY_DATA, parseFile(request, response));
449442
} else {

core/runtime/android/features/src/main/java/org/hapjs/features/Record.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -473,10 +473,7 @@ public void run() {
473473
private SerializeObject makeResult(boolean isLastFrame, byte[] bytes) {
474474
SerializeObject result = new JavaSerializeObject();
475475
result.put(RESULT_IS_LAST_FRAME, isLastFrame);
476-
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(bytes.length);
477-
byteBuffer.put(bytes);
478-
byteBuffer.rewind();
479-
result.put(RESULT_FRAME_BUFFER, new TypedArrayProxy(V8Value.UNSIGNED_INT_8_ARRAY, byteBuffer));
476+
result.put(RESULT_FRAME_BUFFER, new TypedArrayProxy(V8Value.UNSIGNED_INT_8_ARRAY, bytes));
480477
return result;
481478
}
482479

core/runtime/android/features/src/main/java/org/hapjs/features/bluetooth/Bluetooth.java

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -635,11 +635,7 @@ private void writeCharacteristic(final Request request) throws SerializeExceptio
635635
String address = params.getString(PARAM_DEVICE_ID);
636636
String serviceUUID = params.getString(PARAM_SERVICE_UUID);
637637
String charaUUID = params.getString(PARAM_CHARACTERISTIC_UUID);
638-
ArrayBuffer value = (ArrayBuffer) params.get(PARAM_VALUE);
639-
// copy memory to heap
640-
V8ArrayBuffer v8ArrayBuffer = value.getV8ArrayBuffer();
641-
byte[] buffer = new byte[v8ArrayBuffer.remaining()];
642-
v8ArrayBuffer.get(buffer);
638+
byte[] buffer = (byte[]) params.get(PARAM_VALUE);
643639
BleManager.getInstance()
644640
.writeCharacteristic(
645641
address, serviceUUID, charaUUID, buffer, getOperationCallback(request));
@@ -867,10 +863,7 @@ public void onCharacteristicChanged(
867863
serviceUUID.toUpperCase());
868864
result.put(RESULT_CHARACTERISTIC_UUID,
869865
characteristicUUID.toUpperCase());
870-
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(data.length);
871-
byteBuffer.put(data);
872-
byteBuffer.rewind();
873-
result.put(RESULT_VALUE, byteBuffer);
866+
result.put(RESULT_VALUE, data);
874867
runCallbackContext(
875868
EVENT_ON_CHARACTERISTIC_VALUE_CHANGE,
876869
CODE_ON_CHARACTERISTIC_VALUE_CHANGE,
@@ -980,16 +973,10 @@ private JavaSerializeObject toJavaSerializeObject() {
980973
JavaSerializeObject serviceData = new JavaSerializeObject();
981974
for (Pair<String, byte[]> d : mServiceData) {
982975
byte[] bytes = d.second;
983-
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(bytes.length);
984-
byteBuffer.put(bytes);
985-
byteBuffer.rewind();
986-
serviceData.put(d.first, byteBuffer);
976+
serviceData.put(d.first, bytes);
987977
}
988978
result.put(RESULT_SERVICE_DATA, serviceData);
989-
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(mAdvertisData.length);
990-
byteBuffer.put(mAdvertisData);
991-
byteBuffer.rewind();
992-
result.put(RESULT_ADVERTIS_DATA, byteBuffer);
979+
result.put(RESULT_ADVERTIS_DATA, mAdvertisData);
993980
return result;
994981
}
995982

core/runtime/android/features/src/main/java/org/hapjs/features/net/task/RequestTaskImpl.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import java.io.IOException;
3636
import java.io.UnsupportedEncodingException;
3737
import java.net.URLEncoder;
38-
import java.nio.ByteBuffer;
3938
import java.util.ArrayList;
4039
import java.util.HashMap;
4140
import java.util.List;
@@ -253,17 +252,14 @@ private RequestBody getSimplePostBody(Headers headers, Object objData)
253252
return RequestBody.create(
254253
MediaType.parse(CONTENT_TYPE_FORM_URLENCODED),
255254
textParams);
256-
} else if (objData instanceof ByteBuffer) {
255+
} else if (objData instanceof byte[]) {
257256
Log.d(TAG, "getSimplePost objData is ArrayBuffer, contentType=" + contentType);
258257
if (TextUtils.isEmpty(contentType)) {
259258
contentType = CONTENT_TYPE_JSON;
260259
}
261-
//copy memory to heap
262-
ByteBuffer byteBuffer = (ByteBuffer) objData;
263-
byte[] buffer = new byte[byteBuffer.remaining()];
264-
byteBuffer.get(buffer);
260+
265261
try {
266-
return RequestBody.create(MediaType.parse(contentType), new JSONArray(buffer).toString());
262+
return RequestBody.create(MediaType.parse(contentType), new JSONArray(objData).toString());
267263
} catch (JSONException e) {
268264
throw new RuntimeException(e);
269265
}
@@ -325,11 +321,8 @@ public void onResponse(Call call, okhttp3.Response response) throws IOException
325321
result.put(RequestTask.RESULT_KEY_HEADER, parseHeaders(response));
326322
if (response.body() != null) {
327323
byte[] bytes = response.body().bytes();
328-
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(bytes.length);
329-
byteBuffer.put(bytes);
330-
byteBuffer.rewind();
331324

332-
result.put(RequestTask.RESULT_KEY_DATA, new TypedArrayProxy(V8Value.UNSIGNED_INT_8_ARRAY, byteBuffer));
325+
result.put(RequestTask.RESULT_KEY_DATA, new TypedArrayProxy(V8Value.UNSIGNED_INT_8_ARRAY, bytes));
333326
} else {
334327
Log.w(TAG, "response body is invalid");
335328
}

core/runtime/android/features/src/main/java/org/hapjs/features/net/task/UploadCallbackImpl.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,7 @@ private void parseData(SerializeObject result, okhttp3.Response response, String
9797
}
9898
} else if (RESPONSE_TYPE_ARRAYBUFFER.equalsIgnoreCase(responseType)) {
9999
byte[] bytes = response.body().bytes();
100-
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(bytes.length);
101-
byteBuffer.put(bytes);
102-
byteBuffer.rewind();
103-
result.put(RESULT_KEY_DATA, byteBuffer);
100+
result.put(RESULT_KEY_DATA, bytes);
104101
} else if (RESPONSE_TYPE_FILE.equalsIgnoreCase(responseType)) {
105102
result.put(RESULT_KEY_DATA, parseFile(response));
106103
} else {

core/runtime/android/features/src/main/java/org/hapjs/features/nfc/IsoDepInstance.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,7 @@ public byte[] transceive(byte[] buffer) throws IOException {
4343
public void getHistoricalBytes(Request request) {
4444
byte[] historicalBytes = mIsoDep.getHistoricalBytes();
4545
JavaSerializeObject result = new JavaSerializeObject();
46-
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(historicalBytes.length);
47-
byteBuffer.put(historicalBytes);
48-
byteBuffer.rewind();
49-
result.put(NFC.RESULT_HISTORICAL_BYTES, byteBuffer);
46+
result.put(NFC.RESULT_HISTORICAL_BYTES, historicalBytes);
5047
request.getCallback().callback(new Response(result));
5148
}
5249

core/runtime/android/features/src/main/java/org/hapjs/features/nfc/NFCAdapterInstance.java

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -211,10 +211,7 @@ private void onTagDiscovered(Intent intent) {
211211

212212
byte[] id = mDiscoveredTag.getId();
213213
Log.d(TAG, "id: " + Arrays.toString(id));
214-
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(id.length);
215-
byteBuffer.put(id);
216-
byteBuffer.rewind();
217-
resultObj.put(RESULT_ID, byteBuffer);
214+
resultObj.put(RESULT_ID, id);
218215
} else {
219216
Log.e(TAG, "null of discovered tag");
220217
}
@@ -266,18 +263,9 @@ private SerializeArray getMessages(Parcelable[] rawMessages) {
266263
SerializeArray arrayRecord = new JavaSerializeArray();
267264
for (NdefRecord record : ndefRecords) {
268265
SerializeObject recordObj = new JavaSerializeObject();
269-
ByteBuffer idByteBuffer = ByteBuffer.allocateDirect(record.getId().length);
270-
idByteBuffer.put(record.getId());
271-
idByteBuffer.rewind();
272-
recordObj.put(RESULT_MESSAGES_RECORD_ID, idByteBuffer);
273-
ByteBuffer payloadByteBuffer = ByteBuffer.allocateDirect(record.getPayload().length);
274-
payloadByteBuffer.put(record.getPayload());
275-
payloadByteBuffer.rewind();
276-
recordObj.put(RESULT_MESSAGES_RECORD_PAYLOAD, payloadByteBuffer);
277-
ByteBuffer typeByteBuffer = ByteBuffer.allocateDirect(record.getType().length);
278-
typeByteBuffer.put(record.getType());
279-
typeByteBuffer.rewind();
280-
recordObj.put(RESULT_MESSAGES_RECORD_TYPE, typeByteBuffer);
266+
recordObj.put(RESULT_MESSAGES_RECORD_ID, record.getId());
267+
recordObj.put(RESULT_MESSAGES_RECORD_PAYLOAD, record.getPayload());
268+
recordObj.put(RESULT_MESSAGES_RECORD_TYPE, record.getType());
281269
recordObj.put(RESULT_MESSAGES_RECORD_TNF, record.getTnf());
282270
arrayRecord.put(recordObj);
283271
}

core/runtime/android/features/src/main/java/org/hapjs/features/nfc/NfcAInstance.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,7 @@ public byte[] transceive(byte[] buffer) throws IOException {
4646
public void getAtqa(Request request) {
4747
byte[] atqa = mNfcA.getAtqa();
4848
SerializeObject resultObj = new JavaSerializeObject();
49-
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(atqa.length);
50-
byteBuffer.put(atqa);
51-
byteBuffer.rewind();
52-
resultObj.put(NFC.RESULT_ATQA, byteBuffer);
49+
resultObj.put(NFC.RESULT_ATQA, atqa);
5350
request.getCallback().callback(new Response(resultObj));
5451
}
5552

0 commit comments

Comments
 (0)