mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Merge b2g-inbound to m-c.
This commit is contained in:
commit
400b11cacd
@ -802,10 +802,7 @@ pref("dom.datastore.enabled", true);
|
||||
#endif
|
||||
|
||||
// DOM Inter-App Communication API.
|
||||
#ifdef MOZ_WIDGET_GONK
|
||||
// Enable this only for gonk-specific build but not for desktop build.
|
||||
pref("dom.inter-app-communication-api.enabled", true);
|
||||
#endif
|
||||
|
||||
// Allow ADB to run for this many hours before disabling
|
||||
// (only applies when marionette is disabled)
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"revision": "36aa3e5d226a844b07b3e4b2219f54b549456ec1",
|
||||
"revision": "86e06b1db110e34eb66826d3b1bdee3a5d57b3a7",
|
||||
"repo_path": "/integration/gaia-central"
|
||||
}
|
||||
|
@ -66,7 +66,9 @@ nsDOMCameraManager::~nsDOMCameraManager()
|
||||
/* destructor code */
|
||||
DOM_CAMERA_LOGT("%s:%d : this=%p\n", __func__, __LINE__, this);
|
||||
nsCOMPtr<nsIObserverService> obs = services::GetObserverService();
|
||||
obs->RemoveObserver(this, "xpcom-shutdown");
|
||||
if (obs) {
|
||||
obs->RemoveObserver(this, "xpcom-shutdown");
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -1062,6 +1062,23 @@ ContactDB.prototype = {
|
||||
substringResult[event.target.result[i].id] = event.target.result[i];
|
||||
}
|
||||
}.bind(this);
|
||||
} else if (normalized[0] !== "+") {
|
||||
// We might have an international prefix like '00'
|
||||
let parsed = PhoneNumberUtils.parse(normalized);
|
||||
if (parsed && parsed.internationalNumber &&
|
||||
parsed.nationalNumber &&
|
||||
parsed.nationalNumber !== normalized &&
|
||||
parsed.internationalNumber !== normalized) {
|
||||
if (DEBUG) debug("Search with " + parsed.internationalNumber);
|
||||
let prefixRequest = index.mozGetAll(parsed.internationalNumber, limit);
|
||||
|
||||
prefixRequest.onsuccess = function (event) {
|
||||
if (DEBUG) debug("Request successful. Record count: " + event.target.result.length);
|
||||
for (let i in event.target.result) {
|
||||
substringResult[event.target.result[i].id] = event.target.result[i];
|
||||
}
|
||||
}.bind(this);
|
||||
}
|
||||
}
|
||||
|
||||
request = index.mozGetAll(normalized, limit);
|
||||
|
@ -61,6 +61,16 @@ var properties2 = {
|
||||
tel: [{type: ["work"], value: shortNumber, carrier: "testCarrier"}]
|
||||
};
|
||||
|
||||
var number3 = {
|
||||
international1: "0041557932012345",
|
||||
international2: "+557932012345"
|
||||
};
|
||||
|
||||
var properties3 = {
|
||||
name: "Testname2",
|
||||
tel: [{value: number3.international2}]
|
||||
};
|
||||
|
||||
var req;
|
||||
var index = 0;
|
||||
var createResult1;
|
||||
@ -237,6 +247,41 @@ var steps = [
|
||||
}
|
||||
req.onerror = onFailure;
|
||||
},
|
||||
function () {
|
||||
ok(true, "Adding a new contact with country code");
|
||||
createResult1 = new mozContact();
|
||||
createResult1.init(properties3);
|
||||
req = navigator.mozContacts.save(createResult1);
|
||||
req.onsuccess = function () {
|
||||
ok(createResult1.id, "The contact now has an ID.");
|
||||
sample_id1 = createResult1.id;
|
||||
next();
|
||||
};
|
||||
req.onerror = onFailure;
|
||||
},
|
||||
function () {
|
||||
ok(true, "Searching for international number with prefix");
|
||||
var options = {filterBy: ["tel"],
|
||||
filterOp: "match",
|
||||
filterValue: number3.international1};
|
||||
req = mozContacts.find(options);
|
||||
req.onsuccess = function () {
|
||||
ok(req.result.length == 1, "Found exactly 1 contact.");
|
||||
findResult1 = req.result[0];
|
||||
ok(findResult1.id == sample_id1, "Same ID");
|
||||
next();
|
||||
};
|
||||
req.onerror = onFailure;
|
||||
},
|
||||
function () {
|
||||
ok(true, "Deleting database");
|
||||
req = mozContacts.clear();
|
||||
req.onsuccess = function () {
|
||||
ok(true, "Deleted the database");
|
||||
next();
|
||||
}
|
||||
req.onerror = onFailure;
|
||||
},
|
||||
function () {
|
||||
ok(true, "all done!\n");
|
||||
SimpleTest.finish();
|
||||
|
@ -45,15 +45,17 @@
|
||||
}, cbError);
|
||||
}
|
||||
|
||||
var itemNumber = 60;
|
||||
|
||||
function testStoreAdd() {
|
||||
var objects = [];
|
||||
for (var i = 0; i < 300; ++i) {
|
||||
for (var i = 0; i < itemNumber; ++i) {
|
||||
objects.push(i);
|
||||
}
|
||||
|
||||
function testStoreAddInternal() {
|
||||
if (!objects.length) {
|
||||
ok(true, "We inserted 300 items");
|
||||
ok(true, "We inserted " + itemNumber + " items");
|
||||
runTest();
|
||||
return;
|
||||
}
|
||||
@ -70,7 +72,7 @@
|
||||
|
||||
function testStoreGet() {
|
||||
var objects = [];
|
||||
for (var i = 1; i <= 300; ++i) {
|
||||
for (var i = 1; i <= itemNumber; ++i) {
|
||||
objects.push(i);
|
||||
}
|
||||
|
||||
|
@ -136,6 +136,7 @@ SystemMessageManager.prototype = {
|
||||
dispatchers[aType] = { handler: aHandler, messages: [], isHandling: false };
|
||||
|
||||
// Ask for the list of currently pending messages.
|
||||
this.addMessageListeners("SystemMessageManager:GetPendingMessages:Return");
|
||||
cpmm.sendAsyncMessage("SystemMessageManager:GetPendingMessages",
|
||||
{ type: aType,
|
||||
uri: this._uri,
|
||||
@ -214,6 +215,8 @@ SystemMessageManager.prototype = {
|
||||
manifest: this._manifest,
|
||||
uri: this._uri,
|
||||
msgID: msg.msgID });
|
||||
} else if (aMessage.name == "SystemMessageManager:GetPendingMessages:Return") {
|
||||
this.removeMessageListeners(aMessage.name);
|
||||
}
|
||||
|
||||
let messages = (aMessage.name == "SystemMessageManager:Message")
|
||||
@ -248,8 +251,7 @@ SystemMessageManager.prototype = {
|
||||
// nsIDOMGlobalPropertyInitializer implementation.
|
||||
init: function sysMessMgr_init(aWindow) {
|
||||
debug("init");
|
||||
this.initDOMRequestHelper(aWindow, ["SystemMessageManager:Message",
|
||||
"SystemMessageManager:GetPendingMessages:Return"]);
|
||||
this.initDOMRequestHelper(aWindow, ["SystemMessageManager:Message"]);
|
||||
|
||||
let principal = aWindow.document.nodePrincipal;
|
||||
this._isInBrowserElement = principal.isInBrowserElement;
|
||||
|
@ -1152,6 +1152,7 @@ this.GECKO_ICC_SERVICES = {
|
||||
ADN: 2,
|
||||
FDN: 3,
|
||||
PLMNSEL: 7,
|
||||
MSISDN: 9,
|
||||
CBMI: 14,
|
||||
SPN: 17,
|
||||
SDN: 18,
|
||||
@ -1161,6 +1162,7 @@ this.GECKO_ICC_SERVICES = {
|
||||
BDN: 31,
|
||||
PNN: 51,
|
||||
OPL: 52,
|
||||
MDN: 53,
|
||||
SPDI: 56
|
||||
},
|
||||
usim: {
|
||||
@ -1170,10 +1172,12 @@ this.GECKO_ICC_SERVICES = {
|
||||
CBMI: 15,
|
||||
CBMIR: 16,
|
||||
SPN: 19,
|
||||
MSISDN: 21,
|
||||
DATA_DOWNLOAD_SMS_PP: 28,
|
||||
DATA_DOWNLOAD_SMS_CB: 29,
|
||||
PNN: 45,
|
||||
OPL: 46,
|
||||
MDN: 47,
|
||||
SPDI: 51
|
||||
},
|
||||
ruim: {
|
||||
|
@ -10995,10 +10995,8 @@ let ICCRecordHelper = {
|
||||
fetchICCRecords: function fetchICCRecords() {
|
||||
this.readICCID();
|
||||
RIL.getIMSI();
|
||||
this.readMSISDN();
|
||||
this.readAD();
|
||||
this.readSST();
|
||||
this.readMBDN();
|
||||
},
|
||||
|
||||
/**
|
||||
@ -11143,6 +11141,13 @@ let ICCRecordHelper = {
|
||||
debug("SST: " + str);
|
||||
}
|
||||
|
||||
if (ICCUtilsHelper.isICCServiceAvailable("MSISDN")) {
|
||||
if (DEBUG) debug("MSISDN: MSISDN is available");
|
||||
this.readMSISDN();
|
||||
} else {
|
||||
if (DEBUG) debug("MSISDN: MSISDN service is not available");
|
||||
}
|
||||
|
||||
// Fetch SPN and PLMN list, if some of them are available.
|
||||
if (ICCUtilsHelper.isICCServiceAvailable("SPN")) {
|
||||
if (DEBUG) debug("SPN: SPN is available");
|
||||
@ -11151,6 +11156,13 @@ let ICCRecordHelper = {
|
||||
if (DEBUG) debug("SPN: SPN service is not available");
|
||||
}
|
||||
|
||||
if (ICCUtilsHelper.isICCServiceAvailable("MDN")) {
|
||||
if (DEBUG) debug("MDN: MDN available.");
|
||||
this.readMBDN();
|
||||
} else {
|
||||
if (DEBUG) debug("MDN: MDN service is not available");
|
||||
}
|
||||
|
||||
if (ICCUtilsHelper.isICCServiceAvailable("SPDI")) {
|
||||
if (DEBUG) debug("SPDI: SPDI available.");
|
||||
this.readSPDI();
|
||||
|
@ -1895,3 +1895,86 @@ add_test(function test_reading_ad_and_parsing_mcc_mnc() {
|
||||
|
||||
run_next_test();
|
||||
});
|
||||
|
||||
add_test(function test_reading_optional_efs() {
|
||||
let worker = newUint8Worker();
|
||||
let record = worker.ICCRecordHelper;
|
||||
let gsmPdu = worker.GsmPDUHelper;
|
||||
let ril = worker.RIL;
|
||||
let buf = worker.Buf;
|
||||
let io = worker.ICCIOHelper;
|
||||
|
||||
function buildSST(supportedEf) {
|
||||
let sst = [];
|
||||
let len = supportedEf.length;
|
||||
for (let i = 0; i < len; i++) {
|
||||
let index, bitmask, iccService;
|
||||
if (ril.appType === CARD_APPTYPE_SIM) {
|
||||
iccService = GECKO_ICC_SERVICES.sim[supportedEf[i]];
|
||||
iccService -= 1;
|
||||
index = Math.floor(iccService / 4);
|
||||
bitmask = 2 << ((iccService % 4) << 1);
|
||||
} else if (ril.appType === CARD_APPTYPE_USIM){
|
||||
iccService = GECKO_ICC_SERVICES.usim[supportedEf[i]];
|
||||
iccService -= 1;
|
||||
index = Math.floor(iccService / 8);
|
||||
bitmask = 1 << ((iccService % 8) << 0);
|
||||
}
|
||||
|
||||
if (sst) {
|
||||
sst[index] |= bitmask;
|
||||
}
|
||||
}
|
||||
return sst;
|
||||
}
|
||||
|
||||
ril.updateCellBroadcastConfig = function fakeUpdateCellBroadcastConfig() {
|
||||
// Ignore updateCellBroadcastConfig after reading SST
|
||||
};
|
||||
|
||||
function do_test(sst, supportedEf) {
|
||||
// Clone supportedEf to local array for testing
|
||||
let testEf = supportedEf.slice(0);
|
||||
|
||||
record.readMSISDN = function fakeReadMSISDN() {
|
||||
testEf.splice(testEf.indexOf("MSISDN"), 1);
|
||||
};
|
||||
|
||||
record.readMBDN = function fakeReadMBDN() {
|
||||
testEf.splice(testEf.indexOf("MDN"), 1);
|
||||
};
|
||||
|
||||
io.loadTransparentEF = function fakeLoadTransparentEF(options) {
|
||||
// Write data size
|
||||
buf.writeInt32(sst.length * 2);
|
||||
|
||||
// Write data
|
||||
for (let i = 0; i < sst.length; i++) {
|
||||
gsmPdu.writeHexOctet(sst[i] || 0);
|
||||
}
|
||||
|
||||
// Write string delimiter
|
||||
buf.writeStringDelimiter(sst.length * 2);
|
||||
|
||||
if (options.callback) {
|
||||
options.callback(options);
|
||||
}
|
||||
|
||||
if (testEf.length !== 0) {
|
||||
do_print("Un-handled EF: " + JSON.stringify(testEf));
|
||||
do_check_true(false);
|
||||
}
|
||||
};
|
||||
|
||||
record.readSST();
|
||||
}
|
||||
|
||||
// TODO: Add all necessary optional EFs eventually
|
||||
let supportedEf = ["MSISDN", "MDN"];
|
||||
ril.appType = CARD_APPTYPE_SIM;
|
||||
do_test(buildSST(supportedEf), supportedEf);
|
||||
ril.appType = CARD_APPTYPE_USIM;
|
||||
do_test(buildSST(supportedEf), supportedEf);
|
||||
|
||||
run_next_test();
|
||||
});
|
||||
|
@ -198,7 +198,13 @@ ContainerRender(ContainerT* aContainer,
|
||||
continue;
|
||||
}
|
||||
|
||||
layerToRender->RenderLayer(childOffset, clipRect);
|
||||
if (layerToRender->HasLayerBeenComposited()) {
|
||||
// Composer2D will compose this layer so skip GPU composition
|
||||
// this time & reset composition flag for next composition phase
|
||||
layerToRender->SetLayerComposited(false);
|
||||
} else {
|
||||
layerToRender->RenderLayer(childOffset, clipRect);
|
||||
}
|
||||
// invariant: our GL context should be current here, I don't think we can
|
||||
// assert it though
|
||||
}
|
||||
|
@ -726,6 +726,7 @@ LayerComposite::LayerComposite(LayerManagerComposite *aManager)
|
||||
, mUseShadowClipRect(false)
|
||||
, mShadowTransformSetByAnimation(false)
|
||||
, mDestroyed(false)
|
||||
, mLayerComposited(false)
|
||||
{ }
|
||||
|
||||
LayerComposite::~LayerComposite()
|
||||
|
@ -381,12 +381,18 @@ public:
|
||||
mShadowTransformSetByAnimation = aSetByAnimation;
|
||||
}
|
||||
|
||||
void SetLayerComposited(bool value)
|
||||
{
|
||||
mLayerComposited = value;
|
||||
}
|
||||
|
||||
// These getters can be used anytime.
|
||||
float GetShadowOpacity() { return mShadowOpacity; }
|
||||
const nsIntRect* GetShadowClipRect() { return mUseShadowClipRect ? &mShadowClipRect : nullptr; }
|
||||
const nsIntRegion& GetShadowVisibleRegion() { return mShadowVisibleRegion; }
|
||||
const gfx3DMatrix& GetShadowTransform() { return mShadowTransform; }
|
||||
bool GetShadowTransformSetByAnimation() { return mShadowTransformSetByAnimation; }
|
||||
bool HasLayerBeenComposited() { return mLayerComposited; }
|
||||
|
||||
protected:
|
||||
gfx3DMatrix mShadowTransform;
|
||||
@ -398,6 +404,7 @@ protected:
|
||||
bool mUseShadowClipRect;
|
||||
bool mShadowTransformSetByAnimation;
|
||||
bool mDestroyed;
|
||||
bool mLayerComposited;
|
||||
};
|
||||
|
||||
|
||||
|
@ -157,11 +157,13 @@ HwcComposer2D::PrepareLayerList(Layer* aLayer,
|
||||
return true;
|
||||
}
|
||||
|
||||
float opacity = aLayer->GetEffectiveOpacity();
|
||||
if (opacity < 1) {
|
||||
uint8_t opacity = std::min(0xFF, (int)(aLayer->GetEffectiveOpacity() * 256.0));
|
||||
#if ANDROID_VERSION < 18
|
||||
if (opacity < 0xFF) {
|
||||
LOGD("%s Layer has planar semitransparency which is unsupported", aLayer->Name());
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
nsIntRect clip;
|
||||
if (!HwcUtils::CalculateClipRect(aParentTransform * aGLWorldTransform,
|
||||
@ -276,7 +278,7 @@ HwcComposer2D::PrepareLayerList(Layer* aLayer,
|
||||
|
||||
hwcLayer.acquireFenceFd = -1;
|
||||
hwcLayer.releaseFenceFd = -1;
|
||||
hwcLayer.planeAlpha = 0xFF; // Until plane alpha is enabled
|
||||
hwcLayer.planeAlpha = opacity;
|
||||
#else
|
||||
hwcLayer.compositionType = HwcUtils::HWC_USE_COPYBIT;
|
||||
#endif
|
||||
@ -434,6 +436,7 @@ HwcComposer2D::PrepareLayerList(Layer* aLayer,
|
||||
hwcLayer.transform = colorLayer->GetColor().Packed();
|
||||
}
|
||||
|
||||
mHwcLayerMap.AppendElement(static_cast<LayerComposite*>(aLayer->ImplData()));
|
||||
mList->numHwLayers++;
|
||||
return true;
|
||||
}
|
||||
@ -461,13 +464,29 @@ HwcComposer2D::TryHwComposition()
|
||||
|
||||
Prepare(fbsurface->lastHandle, -1);
|
||||
|
||||
bool fullHwcComposite = true;
|
||||
for (int j = 0; j < idx; j++) {
|
||||
if (mList->hwLayers[j].compositionType == HWC_FRAMEBUFFER) {
|
||||
// After prepare, if there is an HWC_FRAMEBUFFER layer,
|
||||
// it means full HWC Composition is not possible this time
|
||||
LOGD("GPU or Partial HWC Composition");
|
||||
return false;
|
||||
fullHwcComposite = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!fullHwcComposite) {
|
||||
for (int k=0; k < idx; k++) {
|
||||
if (mList->hwLayers[k].compositionType == HWC_OVERLAY) {
|
||||
// HWC will compose HWC_OVERLAY layers in partial
|
||||
// HWC Composition, so set layer composition flag
|
||||
// on mapped LayerComposite to skip GPU composition
|
||||
mHwcLayerMap[k]->SetLayerComposited(true);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Full HWC Composition
|
||||
Commit();
|
||||
|
||||
@ -554,28 +573,26 @@ HwcComposer2D::Commit()
|
||||
|
||||
int err = mHwc->set(mHwc, HWC_NUM_DISPLAY_TYPES, displays);
|
||||
|
||||
for (int i = 0; i <= MAX_HWC_LAYERS; i++) {
|
||||
if (mPrevRelFd[i] <= 0) {
|
||||
break;
|
||||
if (!mPrevReleaseFds.IsEmpty()) {
|
||||
// Wait for previous retire Fence to signal.
|
||||
// Denotes contents on display have been replaced.
|
||||
// For buffer-sync, framework should not over-write
|
||||
// prev buffers until we close prev releaseFenceFds
|
||||
sp<Fence> fence = new Fence(mPrevReleaseFds[0]);
|
||||
if (fence->wait(1000) == -ETIME) {
|
||||
LOGE("Wait timed-out for retireFenceFd %d", mPrevReleaseFds[0]);
|
||||
}
|
||||
if (!i) {
|
||||
// Wait for previous retire Fence to signal.
|
||||
// Denotes contents on display have been replaced.
|
||||
// For buffer-sync, framework should not over-write
|
||||
// prev buffers until we close prev releaseFenceFds
|
||||
sp<Fence> fence = new Fence(mPrevRelFd[i]);
|
||||
if (fence->wait(1000) == -ETIME) {
|
||||
LOGE("Wait timed-out for retireFenceFd %d", mPrevRelFd[i]);
|
||||
}
|
||||
|
||||
for (int i = 0; i < mPrevReleaseFds.Length(); i++) {
|
||||
close(mPrevReleaseFds[i]);
|
||||
}
|
||||
close(mPrevRelFd[i]);
|
||||
mPrevRelFd[i] = -1;
|
||||
mPrevReleaseFds.Clear();
|
||||
}
|
||||
|
||||
mPrevRelFd[0] = mList->retireFenceFd;
|
||||
for (uint32_t j = 0; j < (mList->numHwLayers - 1); j++) {
|
||||
mPrevReleaseFds.AppendElement(mList->retireFenceFd);
|
||||
for (uint32_t j=0; j < (mList->numHwLayers - 1); j++) {
|
||||
if (mList->hwLayers[j].compositionType == HWC_OVERLAY) {
|
||||
mPrevRelFd[j + 1] = mList->hwLayers[j].releaseFenceFd;
|
||||
mPrevReleaseFds.AppendElement(mList->hwLayers[j].releaseFenceFd);
|
||||
mList->hwLayers[j].releaseFenceFd = -1;
|
||||
}
|
||||
}
|
||||
@ -609,12 +626,14 @@ HwcComposer2D::TryRender(Layer* aRoot,
|
||||
MOZ_ASSERT(Initialized());
|
||||
if (mList) {
|
||||
mList->numHwLayers = 0;
|
||||
mHwcLayerMap.Clear();
|
||||
}
|
||||
|
||||
// XXX: The clear() below means all rect vectors will be have to be
|
||||
// reallocated. We may want to avoid this if possible
|
||||
mVisibleRegions.clear();
|
||||
|
||||
MOZ_ASSERT(mHwcLayerMap.IsEmpty());
|
||||
if (!PrepareLayerList(aRoot,
|
||||
mScreenRect,
|
||||
gfxMatrix(),
|
||||
|
@ -24,8 +24,6 @@
|
||||
|
||||
#include <hardware/hwcomposer.h>
|
||||
|
||||
#define MAX_HWC_LAYERS 15
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
namespace layers {
|
||||
@ -83,7 +81,8 @@ private:
|
||||
//Holds all the dynamically allocated RectVectors needed
|
||||
//to render the current frame
|
||||
std::list<RectVector> mVisibleRegions;
|
||||
int mPrevRelFd[MAX_HWC_LAYERS + 1];
|
||||
nsTArray<int> mPrevReleaseFds;
|
||||
nsTArray<layers::LayerComposite*> mHwcLayerMap;
|
||||
};
|
||||
|
||||
} // namespace mozilla
|
||||
|
Loading…
Reference in New Issue
Block a user