mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 983502 - navigator.getFeature implementation (support hardware.memory). r=bz
This commit is contained in:
parent
67e83d8a60
commit
0c7f09a06d
@ -326,6 +326,11 @@ this.PermissionsTable = { geolocation: {
|
||||
privileged: PROMPT_ACTION,
|
||||
certified: PROMPT_ACTION
|
||||
},
|
||||
"feature-detection": {
|
||||
app: DENY_ACTION,
|
||||
privileged: ALLOW_ACTION,
|
||||
certified: ALLOW_ACTION
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -1471,6 +1471,52 @@ Navigator::GetDataStores(const nsAString& aName, ErrorResult& aRv)
|
||||
return GetDataStores(mWindow, aName, aRv);
|
||||
}
|
||||
|
||||
already_AddRefed<Promise>
|
||||
Navigator::GetFeature(const nsAString& aName)
|
||||
{
|
||||
nsCOMPtr<nsIGlobalObject> go = do_QueryInterface(mWindow);
|
||||
nsRefPtr<Promise> p = new Promise(go);
|
||||
|
||||
#if defined(XP_LINUX)
|
||||
if (aName.EqualsLiteral("hardware.memory")) {
|
||||
static int memLevel = 1;
|
||||
if (memLevel == 1) {
|
||||
FILE* f = fopen("/proc/meminfo", "r");
|
||||
if (!f) {
|
||||
p->MaybeReject(NS_LITERAL_STRING("CannotOpenMeminfo"));
|
||||
return p.forget();
|
||||
}
|
||||
|
||||
int memTotal;
|
||||
int n = fscanf(f, "MemTotal: %d kB\n", &memTotal);
|
||||
fclose(f);
|
||||
|
||||
if (memTotal == 0 || n != 1) {
|
||||
p->MaybeReject(NS_LITERAL_STRING("Abnormal"));
|
||||
return p.forget();
|
||||
}
|
||||
// From KB to MB
|
||||
memTotal /= 1024;
|
||||
|
||||
// round the value up to the next power of two
|
||||
while (memLevel <= memTotal) {
|
||||
memLevel *= 2;
|
||||
}
|
||||
}
|
||||
p->MaybeResolve(memLevel);
|
||||
} // hardware.memory
|
||||
else
|
||||
#endif
|
||||
{
|
||||
// resolve with <undefined> because the feature name is not supported
|
||||
p->MaybeResolve(JS::UndefinedHandleValue);
|
||||
}
|
||||
|
||||
return p.forget();
|
||||
|
||||
}
|
||||
|
||||
|
||||
PowerManager*
|
||||
Navigator::GetMozPower(ErrorResult& aRv)
|
||||
{
|
||||
@ -2444,6 +2490,15 @@ Navigator::HasNetworkStatsSupport(JSContext* /* unused */, JSObject* aGlobal)
|
||||
return CheckPermission(win, "networkstats-manage");
|
||||
}
|
||||
|
||||
/* static */
|
||||
bool
|
||||
Navigator::HasFeatureDetectionSupport(JSContext* /* unused */, JSObject* aGlobal)
|
||||
{
|
||||
nsCOMPtr<nsPIDOMWindow> win = GetWindowFromGlobal(aGlobal);
|
||||
return CheckPermission(win, "feature-detection");
|
||||
}
|
||||
|
||||
|
||||
/* static */
|
||||
already_AddRefed<nsPIDOMWindow>
|
||||
Navigator::GetWindowFromGlobal(JSObject* aGlobal)
|
||||
|
@ -164,6 +164,10 @@ public:
|
||||
|
||||
already_AddRefed<Promise> GetDataStores(const nsAString &aName,
|
||||
ErrorResult& aRv);
|
||||
|
||||
// Feature Detection API
|
||||
already_AddRefed<Promise> GetFeature(const nsAString &aName);
|
||||
|
||||
bool Vibrate(uint32_t aDuration);
|
||||
bool Vibrate(const nsTArray<uint32_t>& aDuration);
|
||||
uint32_t MaxTouchPoints();
|
||||
@ -317,6 +321,8 @@ public:
|
||||
|
||||
static bool HasNetworkStatsSupport(JSContext* aCx, JSObject* aGlobal);
|
||||
|
||||
static bool HasFeatureDetectionSupport(JSContext* aCx, JSObject* aGlobal);
|
||||
|
||||
nsPIDOMWindow* GetParentObject() const
|
||||
{
|
||||
return GetWindow();
|
||||
|
@ -28,6 +28,7 @@ Navigator implements NavigatorLanguage;
|
||||
Navigator implements NavigatorOnLine;
|
||||
Navigator implements NavigatorContentUtils;
|
||||
Navigator implements NavigatorStorageUtils;
|
||||
Navigator implements NavigatorFeatures;
|
||||
|
||||
[NoInterfaceObject]
|
||||
interface NavigatorID {
|
||||
@ -80,6 +81,12 @@ interface NavigatorStorageUtils {
|
||||
//void yieldForStorageUpdates();
|
||||
};
|
||||
|
||||
[NoInterfaceObject]
|
||||
interface NavigatorFeatures {
|
||||
[Func="Navigator::HasFeatureDetectionSupport"]
|
||||
Promise getFeature(DOMString name);
|
||||
};
|
||||
|
||||
// Things that definitely need to be in the spec and and are not for some
|
||||
// reason. See https://www.w3.org/Bugs/Public/show_bug.cgi?id=22406
|
||||
partial interface Navigator {
|
||||
|
Loading…
Reference in New Issue
Block a user