mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-30 08:12:05 +00:00
Merge b2g-inbound to m-c
This commit is contained in:
commit
0d1c538411
@ -12,7 +12,7 @@
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="6894b915ee7d031a1f0ed16c422c48f293de1b84"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="7c320aa3291761196ccd6ed3131faffb255f3fb6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="d11f524d00cacf5ba0dfbf25e4aa2158b1c3a036"/>
|
||||
|
@ -11,7 +11,7 @@
|
||||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="6894b915ee7d031a1f0ed16c422c48f293de1b84"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="7c320aa3291761196ccd6ed3131faffb255f3fb6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="a314508e397c8f1814228d36259ea8708034444e"/>
|
||||
|
@ -12,7 +12,7 @@
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="6894b915ee7d031a1f0ed16c422c48f293de1b84"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="7c320aa3291761196ccd6ed3131faffb255f3fb6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="d11f524d00cacf5ba0dfbf25e4aa2158b1c3a036"/>
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"revision": "5b157e823d42532a365d33cfe3a8bd9ba4b71152",
|
||||
"revision": "2741c63d7513126ea0a7f033266a4230334dfc53",
|
||||
"repo_path": "/integration/gaia-central"
|
||||
}
|
||||
|
@ -11,7 +11,7 @@
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="6894b915ee7d031a1f0ed16c422c48f293de1b84"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="7c320aa3291761196ccd6ed3131faffb255f3fb6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="84f2f2fce22605e17d511ff1767e54770067b5b5"/>
|
||||
|
@ -10,7 +10,7 @@
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="6894b915ee7d031a1f0ed16c422c48f293de1b84"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="7c320aa3291761196ccd6ed3131faffb255f3fb6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="84f2f2fce22605e17d511ff1767e54770067b5b5"/>
|
||||
|
@ -12,7 +12,7 @@
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="6894b915ee7d031a1f0ed16c422c48f293de1b84"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="7c320aa3291761196ccd6ed3131faffb255f3fb6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="84f2f2fce22605e17d511ff1767e54770067b5b5"/>
|
||||
|
@ -11,7 +11,7 @@
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="6894b915ee7d031a1f0ed16c422c48f293de1b84"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="7c320aa3291761196ccd6ed3131faffb255f3fb6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="84f2f2fce22605e17d511ff1767e54770067b5b5"/>
|
||||
|
@ -11,7 +11,7 @@
|
||||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="6894b915ee7d031a1f0ed16c422c48f293de1b84"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="7c320aa3291761196ccd6ed3131faffb255f3fb6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="a314508e397c8f1814228d36259ea8708034444e"/>
|
||||
|
@ -11,7 +11,7 @@
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="6894b915ee7d031a1f0ed16c422c48f293de1b84"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="7c320aa3291761196ccd6ed3131faffb255f3fb6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="84f2f2fce22605e17d511ff1767e54770067b5b5"/>
|
||||
|
@ -110,14 +110,14 @@ XPCOMUtils.defineLazyGetter(this, "updateSvc", function() {
|
||||
});
|
||||
|
||||
#ifdef MOZ_WIDGET_GONK
|
||||
const DIRECTORY_KEY = "webappsDir";
|
||||
const DIRECTORY_NAME = "webappsDir";
|
||||
#elifdef ANDROID
|
||||
const DIRECTORY_KEY = "webappsDir";
|
||||
const DIRECTORY_NAME = "webappsDir";
|
||||
#else
|
||||
// If we're executing in the context of the webapp runtime, the data files
|
||||
// are in a different directory (currently the Firefox profile that installed
|
||||
// the webapp); otherwise, they're in the current profile.
|
||||
const DIRECTORY_KEY = WEBAPP_RUNTIME ? "WebappRegD" : "ProfD";
|
||||
const DIRECTORY_NAME = WEBAPP_RUNTIME ? "WebappRegD" : "ProfD";
|
||||
#endif
|
||||
|
||||
// We'll use this to identify privileged apps that have been preinstalled
|
||||
@ -161,8 +161,8 @@ this.DOMApplicationRegistry = {
|
||||
|
||||
AppDownloadManager.registerCancelFunction(this.cancelDownload.bind(this));
|
||||
|
||||
this.appsFile = OS.Path.join(Services.dirsvc.get(DIRECTORY_KEY, Ci.nsIFile).path,
|
||||
"webapps", "webapps.json");
|
||||
this.appsFile = FileUtils.getFile(DIRECTORY_NAME,
|
||||
["webapps", "webapps.json"], true).path;
|
||||
|
||||
this.loadAndUpdateApps();
|
||||
},
|
||||
@ -171,10 +171,7 @@ this.DOMApplicationRegistry = {
|
||||
loadCurrentRegistry: function() {
|
||||
return this._loadJSONAsync(this.appsFile).then((aData) => {
|
||||
if (!aData) {
|
||||
// If _loadJSONAsync returns null, we're probably in the firstrun case
|
||||
// so we may need to create the "webapps" directory.
|
||||
return OS.File.makeDir(OS.Path.dirname(this.appsFile),
|
||||
{ ignoreExisting: true });
|
||||
return;
|
||||
}
|
||||
|
||||
this.webapps = aData;
|
||||
@ -410,13 +407,8 @@ this.DOMApplicationRegistry = {
|
||||
debug("Installing 3rd party app : " + aId +
|
||||
" from " + baseDir.path);
|
||||
|
||||
// We copy this app to DIRECTORY_KEY/$aId, and set the base path as needed.
|
||||
let destDir = this._getAppDir(aId);
|
||||
try {
|
||||
destDir.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
|
||||
} catch (ex if ex.result == Cr.NS_ERROR_FILE_ALREADY_EXISTS) {
|
||||
// Ignore the exception if the directory already exists.
|
||||
}
|
||||
// We copy this app to DIRECTORY_NAME/$aId, and set the base path as needed.
|
||||
let destDir = FileUtils.getDir(DIRECTORY_NAME, ["webapps", aId], true, true);
|
||||
|
||||
filesToMove.forEach(function(aFile) {
|
||||
let file = baseDir.clone();
|
||||
@ -1205,7 +1197,7 @@ this.DOMApplicationRegistry = {
|
||||
},
|
||||
|
||||
_getAppDir: function(aId) {
|
||||
return FileUtils.getDir(DIRECTORY_KEY, ["webapps", aId], false, true);
|
||||
return FileUtils.getDir(DIRECTORY_NAME, ["webapps", aId], true, true);
|
||||
},
|
||||
|
||||
_writeFile: function(aPath, aData) {
|
||||
@ -1345,8 +1337,11 @@ this.DOMApplicationRegistry = {
|
||||
|
||||
// We need to get the update manifest here, not the webapp manifest.
|
||||
// If this is an update, the update manifest is staged.
|
||||
let file = this._getAppDir(id);
|
||||
file.append(isUpdate ? "staged-update.webapp" : "update.webapp");
|
||||
let file = FileUtils.getFile(DIRECTORY_NAME,
|
||||
["webapps", id,
|
||||
isUpdate ? "staged-update.webapp"
|
||||
: "update.webapp"],
|
||||
true);
|
||||
|
||||
if (!file.exists()) {
|
||||
// This is a hosted app, let's check if it has an appcache
|
||||
@ -1436,13 +1431,13 @@ this.DOMApplicationRegistry = {
|
||||
// We need to get the old manifest to unregister web activities.
|
||||
this.getManifestFor(aManifestURL).then((aOldManifest) => {
|
||||
// Move the application.zip and manifest.webapp files out of TmpD
|
||||
let tmpDir = FileUtils.getDir("TmpD", ["webapps", id], false, true);
|
||||
let tmpDir = FileUtils.getDir("TmpD", ["webapps", id], true, true);
|
||||
let manFile = tmpDir.clone();
|
||||
manFile.append("manifest.webapp");
|
||||
let appFile = tmpDir.clone();
|
||||
appFile.append("application.zip");
|
||||
|
||||
let dir = this._getAppDir(id);
|
||||
let dir = FileUtils.getDir(DIRECTORY_NAME, ["webapps", id], true, true);
|
||||
appFile.moveTo(dir, "application.zip");
|
||||
manFile.moveTo(dir, "manifest.webapp");
|
||||
|
||||
@ -2205,14 +2200,16 @@ this.DOMApplicationRegistry = {
|
||||
},
|
||||
|
||||
denyInstall: function(aData) {
|
||||
Task.spawn(function*() {
|
||||
let packageId = aData.app.packageId;
|
||||
if (packageId) {
|
||||
let dir = OS.Path.join(OS.Constants.Path.tmpDir, "webapps", packageId);
|
||||
yield OS.File.removeDir(dir, { ignoreAbsent: true });
|
||||
let packageId = aData.app.packageId;
|
||||
if (packageId) {
|
||||
let dir = FileUtils.getDir("TmpD", ["webapps", packageId],
|
||||
true, true);
|
||||
try {
|
||||
dir.remove(true);
|
||||
} catch(e) {
|
||||
}
|
||||
aData.mm.sendAsyncMessage("Webapps:Install:Return:KO", aData);
|
||||
}).then(null, Cu.reportError);
|
||||
}
|
||||
aData.mm.sendAsyncMessage("Webapps:Install:Return:KO", aData);
|
||||
},
|
||||
|
||||
// This function is called after we called the onsuccess callback on the
|
||||
@ -2314,13 +2311,14 @@ onInstallSuccessAck: function onInstallSuccessAck(aManifestURL,
|
||||
return appObject;
|
||||
},
|
||||
|
||||
_writeManifestFile: function(aDir, aIsPackage, aJsonManifest) {
|
||||
_writeManifestFile: function(aId, aIsPackage, aJsonManifest) {
|
||||
debug("_writeManifestFile");
|
||||
|
||||
// For packaged apps, keep the update manifest distinct from the app manifest.
|
||||
let manifestName = aIsPackage ? "update.webapp" : "manifest.webapp";
|
||||
|
||||
let manFile = OS.Path.join(aDir, manifestName);
|
||||
let dir = this._getAppDir(aId).path;
|
||||
let manFile = OS.Path.join(dir, manifestName);
|
||||
this._writeFile(manFile, JSON.stringify(aJsonManifest));
|
||||
},
|
||||
|
||||
@ -2346,18 +2344,10 @@ onInstallSuccessAck: function onInstallSuccessAck(aManifestURL,
|
||||
localId = this._nextLocalId();
|
||||
}
|
||||
|
||||
// Create the app directory
|
||||
let dir = this._getAppDir(id);
|
||||
try {
|
||||
dir.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
|
||||
} catch (ex if ex.result == Cr.NS_ERROR_FILE_ALREADY_EXISTS) {
|
||||
// Ignore the exception if the directory already exists.
|
||||
}
|
||||
|
||||
let app = this._setupApp(aData, id);
|
||||
|
||||
let jsonManifest = aData.isPackage ? app.updateManifest : app.manifest;
|
||||
this._writeManifestFile(dir.path, aData.isPackage, jsonManifest);
|
||||
this._writeManifestFile(id, aData.isPackage, jsonManifest);
|
||||
|
||||
debug("app.origin: " + app.origin);
|
||||
let manifest = new ManifestHelper(jsonManifest, app.origin);
|
||||
@ -2477,14 +2467,11 @@ onInstallSuccessAck: function onInstallSuccessAck(aManifestURL,
|
||||
debug("_onDownloadPackage");
|
||||
// Success! Move the zip out of TmpD.
|
||||
let app = this.webapps[aId];
|
||||
|
||||
let tmpDir = FileUtils.getDir("TmpD", ["webapps", aId], false, true);
|
||||
let zipFile = tmpDir.clone();
|
||||
zipFile.append("application.zip");
|
||||
|
||||
let zipFile =
|
||||
FileUtils.getFile("TmpD", ["webapps", aId, "application.zip"], true);
|
||||
let dir = this._getAppDir(aId);
|
||||
zipFile.moveTo(dir, "application.zip");
|
||||
|
||||
let tmpDir = FileUtils.getDir("TmpD", ["webapps", aId], true, true);
|
||||
try {
|
||||
tmpDir.remove(true);
|
||||
} catch(e) { }
|
||||
@ -2577,7 +2564,7 @@ onInstallSuccessAck: function onInstallSuccessAck(aManifestURL,
|
||||
if (!this._manifestCache[id]) {
|
||||
// the manifest file used to be named manifest.json, so fallback on this.
|
||||
let baseDir = this.webapps[id].basePath == this.getCoreAppsBasePath()
|
||||
? "coreAppsDir" : DIRECTORY_KEY;
|
||||
? "coreAppsDir" : DIRECTORY_NAME;
|
||||
|
||||
let dir = FileUtils.getDir(baseDir, ["webapps", id], false, true);
|
||||
|
||||
@ -2705,7 +2692,7 @@ onInstallSuccessAck: function onInstallSuccessAck(aManifestURL,
|
||||
debug("No deviceStorage");
|
||||
// deviceStorage isn't available, so use FileUtils to find the size of
|
||||
// available storage.
|
||||
let dir = FileUtils.getDir(DIRECTORY_KEY, ["webapps"], false, true);
|
||||
let dir = FileUtils.getDir(DIRECTORY_NAME, ["webapps"], true, true);
|
||||
try {
|
||||
let sufficientStorage = this._checkDownloadSize(dir.diskSpaceAvailable,
|
||||
aNewApp);
|
||||
@ -2962,9 +2949,10 @@ onInstallSuccessAck: function onInstallSuccessAck(aManifestURL,
|
||||
eventType: ["downloadsuccess", "downloadapplied"]
|
||||
});
|
||||
});
|
||||
|
||||
let appDir = OS.Path.join(OS.Constants.Path.tmpDir, "webapps", aId);
|
||||
OS.File.removeDir(appDir, { ignoreAbsent: true });
|
||||
let file = FileUtils.getFile("TmpD", ["webapps", aId], false);
|
||||
if (file && file.exists()) {
|
||||
file.remove(true);
|
||||
}
|
||||
},
|
||||
|
||||
_openAndReadPackage: function(aZipFile, aOldApp, aNewApp, aIsLocalFileInstall,
|
||||
@ -3229,9 +3217,9 @@ onInstallSuccessAck: function onInstallSuccessAck(aManifestURL,
|
||||
this.webapps[newId] = aOldApp;
|
||||
delete this.webapps[oldId];
|
||||
// Rename the directories where the files are installed.
|
||||
[DIRECTORY_KEY, "TmpD"].forEach(function(aDir) {
|
||||
let parent = FileUtils.getDir(aDir, ["webapps"], false, true);
|
||||
let dir = FileUtils.getDir(aDir, ["webapps", oldId], false, true);
|
||||
[DIRECTORY_NAME, "TmpD"].forEach(function(aDir) {
|
||||
let parent = FileUtils.getDir(aDir, ["webapps"], true, true);
|
||||
let dir = FileUtils.getDir(aDir, ["webapps", oldId], true, true);
|
||||
dir.moveTo(parent, newId);
|
||||
});
|
||||
// Signals that we need to swap the old id with the new app.
|
||||
@ -3308,7 +3296,7 @@ onInstallSuccessAck: function onInstallSuccessAck(aManifestURL,
|
||||
// Removes the directory we created, and sends an error to the DOM side.
|
||||
_revertDownloadPackage: function(aId, aOldApp, aNewApp, aIsUpdate, aError) {
|
||||
debug("Cleanup: " + aError + "\n" + aError.stack);
|
||||
let dir = FileUtils.getDir("TmpD", ["webapps", aId], false, true);
|
||||
let dir = FileUtils.getDir("TmpD", ["webapps", aId], true, true);
|
||||
try {
|
||||
dir.remove(true);
|
||||
} catch (e) { }
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Mozilla Foundation
|
||||
* Copyright (C) 2013-2014 Mozilla Foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -153,6 +153,10 @@ GonkCameraParameters::Initialize()
|
||||
if (NS_FAILED(rv)) {
|
||||
return rv;
|
||||
}
|
||||
rv = GetListAsArray(CAMERA_PARAM_SUPPORTED_ZOOMRATIOS, mZoomRatios);
|
||||
if (NS_FAILED(rv)) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
mInitialized = true;
|
||||
return NS_OK;
|
||||
@ -401,16 +405,53 @@ GonkCameraParameters::GetTranslated(uint32_t aKey, int64_t& aValue)
|
||||
nsresult
|
||||
GonkCameraParameters::SetTranslated(uint32_t aKey, const double& aValue)
|
||||
{
|
||||
if (aKey == CAMERA_PARAM_EXPOSURECOMPENSATION) {
|
||||
/**
|
||||
* Convert from real value to a Gonk index, round
|
||||
* to the nearest step; index is 1-based.
|
||||
*/
|
||||
int index =
|
||||
(aValue - mExposureCompensationMin + mExposureCompensationStep / 2) /
|
||||
mExposureCompensationStep + 1;
|
||||
DOM_CAMERA_LOGI("Exposure compensation = %f --> index = %d\n", aValue, index);
|
||||
return SetImpl(CAMERA_PARAM_EXPOSURECOMPENSATION, index);
|
||||
int index;
|
||||
int value;
|
||||
|
||||
switch (aKey) {
|
||||
case CAMERA_PARAM_EXPOSURECOMPENSATION:
|
||||
/**
|
||||
* Convert from real value to a Gonk index, round
|
||||
* to the nearest step; index is 1-based.
|
||||
*/
|
||||
index =
|
||||
(aValue - mExposureCompensationMin + mExposureCompensationStep / 2) /
|
||||
mExposureCompensationStep + 1;
|
||||
DOM_CAMERA_LOGI("Exposure compensation = %f --> index = %d\n", aValue, index);
|
||||
return SetImpl(CAMERA_PARAM_EXPOSURECOMPENSATION, index);
|
||||
|
||||
case CAMERA_PARAM_ZOOM:
|
||||
{
|
||||
/**
|
||||
* Convert from a real zoom multipler (e.g. 2.5x) to
|
||||
* the index of the nearest supported value.
|
||||
*/
|
||||
value = aValue * 100.0;
|
||||
|
||||
// mZoomRatios is sorted, so we can binary search it
|
||||
unsigned int bottom = 0;
|
||||
unsigned int top = mZoomRatios.Length() - 1;
|
||||
unsigned int middle;
|
||||
|
||||
while (bottom != top) {
|
||||
middle = (top + bottom) / 2;
|
||||
if (value == mZoomRatios[middle]) {
|
||||
// exact match
|
||||
break;
|
||||
}
|
||||
if (value > mZoomRatios[middle] && value < mZoomRatios[middle + 1]) {
|
||||
// the specified zoom value lies in this interval
|
||||
break;
|
||||
}
|
||||
if (value > mZoomRatios[middle]) {
|
||||
bottom = middle + 1;
|
||||
} else {
|
||||
top = middle - 1;
|
||||
}
|
||||
}
|
||||
index = middle;
|
||||
}
|
||||
return SetImpl(CAMERA_PARAM_ZOOM, index);
|
||||
}
|
||||
|
||||
return SetImpl(aKey, aValue);
|
||||
@ -427,9 +468,9 @@ GonkCameraParameters::GetTranslated(uint32_t aKey, double& aValue)
|
||||
|
||||
switch (aKey) {
|
||||
case CAMERA_PARAM_ZOOM:
|
||||
rv = GetImpl(CAMERA_PARAM_ZOOM, val);
|
||||
rv = GetImpl(CAMERA_PARAM_ZOOM, index);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
val /= 100.0;
|
||||
val = mZoomRatios[index] / 100.0;
|
||||
} else {
|
||||
// return 1x when zooming is not supported
|
||||
val = 1.0;
|
||||
@ -557,6 +598,16 @@ ParseItem(const char* aStart, const char* aEnd, double* aItem)
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
nsresult
|
||||
ParseItem(const char* aStart, const char* aEnd, int* aItem)
|
||||
{
|
||||
if (sscanf(aStart, "%d", aItem) == 1) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
template<class T> nsresult
|
||||
GonkCameraParameters::GetListAsArray(uint32_t aKey, nsTArray<T>& aArray)
|
||||
{
|
||||
@ -609,6 +660,14 @@ GonkCameraParameters::GetTranslated(uint32_t aKey, nsTArray<nsString>& aValues)
|
||||
nsresult
|
||||
GonkCameraParameters::GetTranslated(uint32_t aKey, nsTArray<double>& aValues)
|
||||
{
|
||||
if (aKey == CAMERA_PARAM_SUPPORTED_ZOOMRATIOS) {
|
||||
aValues.Clear();
|
||||
for (int i = 0; i < mZoomRatios.Length(); ++i) {
|
||||
*aValues.AppendElement() = mZoomRatios[i] / 100.0;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
return GetListAsArray(aKey, aValues);
|
||||
}
|
||||
|
||||
|
@ -94,6 +94,7 @@ protected:
|
||||
// Required internal properties
|
||||
double mExposureCompensationMin;
|
||||
double mExposureCompensationStep;
|
||||
nsTArray<int> mZoomRatios;
|
||||
|
||||
// This subclass of android::CameraParameters just gives
|
||||
// all of the AOSP getters and setters the same signature.
|
||||
|
@ -33,8 +33,8 @@ function onError(e) {
|
||||
}
|
||||
|
||||
var capabilities = [ 'previewSizes', 'pictureSizes', 'fileFormats', 'maxFocusAreas', 'minExposureCompensation',
|
||||
'maxExposureCompensation', 'stepExposureCompensation', 'maxMeteringAreas', 'videoSizes',
|
||||
'recorderProfiles'];
|
||||
'maxExposureCompensation', 'stepExposureCompensation', 'maxMeteringAreas', 'videoSizes',
|
||||
'recorderProfiles', 'zoomRatios'];
|
||||
|
||||
var Camera = {
|
||||
cameraObj: null,
|
||||
@ -49,6 +49,7 @@ var Camera = {
|
||||
_zoomRatios: null,
|
||||
_sceneModes: null,
|
||||
_focusModes: null,
|
||||
_zoomRatios: null,
|
||||
_testsCompleted: 0,
|
||||
_shutter: 0,
|
||||
_config: {
|
||||
@ -67,6 +68,12 @@ var Camera = {
|
||||
setFocus: function camera_setfocus(mode) {
|
||||
this.cameraObj.focus = mode;
|
||||
},
|
||||
setZoom: function camera_setZoom(zoom) {
|
||||
this.cameraObj.zoom = zoom;
|
||||
},
|
||||
getZoom: function camera_getZoom() {
|
||||
return this.cameraObj.zoom;
|
||||
},
|
||||
getFileFormats: function camera_formats() {
|
||||
this._fileFormats = this.cameraObj.capabilities.fileFormats;
|
||||
},
|
||||
@ -91,6 +98,9 @@ var Camera = {
|
||||
getPreviewSizes: function camera_preview() {
|
||||
this._previewSizes = this.cameraObj.capabilities.previewSizes;
|
||||
},
|
||||
getZoomRatios: function camera_preview() {
|
||||
this._zoomRatios = this.cameraObj.capabilities.zoomRatios;
|
||||
},
|
||||
takePictureSuccess: function taken_foto(blob) {
|
||||
var img = new Image();
|
||||
var test = this._currentTest;
|
||||
@ -137,9 +147,35 @@ var Camera = {
|
||||
Camera.getPreviewSizes();
|
||||
Camera.getFileFormats();
|
||||
Camera.getFocusModes();
|
||||
Camera.getZoomRatios();
|
||||
ok(Camera._previewSizes.length > 0, "previewSizes length = " + Camera._previewSizes.length);
|
||||
ok(Camera._pictureSizes.length > 0, "picturesizes length = " + Camera._pictureSizes.length);
|
||||
ok(Camera._fileFormats.length > 0, "file formats length = " + Camera._fileFormats.length);
|
||||
info("zoom ratios length = " + Camera._zoomRatios.length);
|
||||
|
||||
if (Camera._zoomRatios.length > 0) {
|
||||
Camera._zoomRatios.forEach(function(element, index) {
|
||||
info("zoom[" + index + "] = " + element + "x");
|
||||
Camera.setZoom(element);
|
||||
ok(Camera.getZoom() === element, "zoom[" + index + "] = " + element + "x");
|
||||
});
|
||||
|
||||
var zoom = Camera._zoomRatios[0] - 0.1;
|
||||
Camera.setZoom(zoom);
|
||||
ok(Camera.getZoom() === Camera._zoomRatios[0],
|
||||
zoom + "x zoom clamps to minimum: " + Camera._zoomRatios[0]);
|
||||
zoom = Camera._zoomRatios.slice(-1)[0] + 1.0;
|
||||
Camera.setZoom(zoom);
|
||||
ok(Camera.getZoom() === Camera._zoomRatios[0],
|
||||
zoom + "x zoom clamps to maximum: " + Camera._zoomRatios.slice(-1)[0]);
|
||||
if (Camera._zoomRatios.length > 1) {
|
||||
zoom = (Camera._zoomRatios[0] + Camera._zoomRatios[1]) / 2;
|
||||
Camera.setZoom(zoom);
|
||||
ok(Camera.getZoom() === Camera._zoomRatios[0],
|
||||
zoom + "x zoom rounded down to maximum: " + Camera._zoomRatios.slice[0]);
|
||||
}
|
||||
}
|
||||
|
||||
Camera._tests = new Array();
|
||||
for (var i in Camera._pictureSizes) {
|
||||
for (var l in Camera._fileFormats) {
|
||||
|
@ -228,6 +228,7 @@ CheckPermission(PContentParent* aActor,
|
||||
uint32_t appPerm = nsIPermissionManager::UNKNOWN_ACTION;
|
||||
nsresult rv = pm->TestExactPermissionFromPrincipal(appPrincipal, aPermission, &appPerm);
|
||||
NS_ENSURE_SUCCESS(rv, nsIPermissionManager::UNKNOWN_ACTION);
|
||||
// Setting to "deny" in the settings UI should deny everywhere.
|
||||
if (appPerm == nsIPermissionManager::UNKNOWN_ACTION ||
|
||||
appPerm == nsIPermissionManager::DENY_ACTION) {
|
||||
return appPerm;
|
||||
@ -241,6 +242,15 @@ CheckPermission(PContentParent* aActor,
|
||||
return permission;
|
||||
}
|
||||
|
||||
// For browser content (and if the app hasn't explicitly denied this),
|
||||
// consider the requesting origin, not the app.
|
||||
if (appPerm == nsIPermissionManager::PROMPT_ACTION &&
|
||||
aPrincipal->GetIsInBrowserElement()) {
|
||||
return permission;
|
||||
}
|
||||
|
||||
// Setting to "prompt" in the settings UI should prompt everywhere in
|
||||
// non-browser content.
|
||||
if (appPerm == nsIPermissionManager::PROMPT_ACTION ||
|
||||
permission == nsIPermissionManager::PROMPT_ACTION) {
|
||||
return nsIPermissionManager::PROMPT_ACTION;
|
||||
|
@ -275,12 +275,6 @@ WebappsActor.prototype = {
|
||||
// Move manifest.webapp to the destination directory.
|
||||
// The destination directory for this app.
|
||||
let installDir = DOMApplicationRegistry._getAppDir(aId);
|
||||
try {
|
||||
installDir.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
|
||||
} catch (ex if ex.result == Cr.NS_ERROR_FILE_ALREADY_EXISTS) {
|
||||
// Ignore the exception if the directory already exists.
|
||||
}
|
||||
|
||||
if (aManifest) {
|
||||
let manFile = OS.Path.join(installDir.path, "manifest.webapp");
|
||||
return DOMApplicationRegistry._writeFile(manFile, JSON.stringify(aManifest)).then(() => {
|
||||
@ -400,12 +394,6 @@ WebappsActor.prototype = {
|
||||
// we can move application.zip to the destination directory, and
|
||||
// extract manifest.webapp there.
|
||||
let installDir = DOMApplicationRegistry._getAppDir(id);
|
||||
try {
|
||||
installDir.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
|
||||
} catch (ex if ex.result == Cr.NS_ERROR_FILE_ALREADY_EXISTS) {
|
||||
// Ignore the exception if the directory already exists.
|
||||
}
|
||||
|
||||
let manFile = installDir.clone();
|
||||
manFile.append("manifest.webapp");
|
||||
zipReader.extract("manifest.webapp", manFile);
|
||||
|
Loading…
Reference in New Issue
Block a user