dom/camera/CameraRecorderProfiles.cpp

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
     3  * You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 #include "CameraRecorderProfiles.h"
     6 #include "jsapi.h"
     7 #include "CameraCommon.h"
     9 using namespace mozilla;
    11 /**
    12  * Video profile implementation.
    13  */
    14 RecorderVideoProfile::RecorderVideoProfile(uint32_t aCameraId, uint32_t aQualityIndex)
    15   : mCameraId(aCameraId)
    16   , mQualityIndex(aQualityIndex)
    17 {
    18   DOM_CAMERA_LOGT("%s:%d : this=%p\n", __func__, __LINE__, this);
    19 }
    21 RecorderVideoProfile::~RecorderVideoProfile()
    22 {
    23   DOM_CAMERA_LOGT("%s:%d : this=%p\n", __func__, __LINE__, this);
    24 }
    26 nsresult
    27 RecorderVideoProfile::GetJsObject(JSContext* aCx, JSObject** aObject)
    28 {
    29   NS_ENSURE_TRUE(aObject, NS_ERROR_INVALID_ARG);
    31   JS::Rooted<JSObject*> o(aCx, JS_NewObject(aCx, nullptr, JS::NullPtr(), JS::NullPtr()));
    32   NS_ENSURE_TRUE(o, NS_ERROR_OUT_OF_MEMORY);
    34   const char* codec = GetCodecName();
    35   NS_ENSURE_TRUE(codec, NS_ERROR_FAILURE);
    37   JS::Rooted<JSString*> s(aCx, JS_NewStringCopyZ(aCx, codec));
    38   JS::Rooted<JS::Value> v(aCx, STRING_TO_JSVAL(s));
    39   if (!JS_SetProperty(aCx, o, "codec", v)) {
    40     return NS_ERROR_FAILURE;
    41   }
    43   if (mBitrate != -1) {
    44     v = INT_TO_JSVAL(mBitrate);
    45     if (!JS_SetProperty(aCx, o, "bitrate", v)) {
    46       return NS_ERROR_FAILURE;
    47     }
    48   }
    49   if (mFramerate != -1) {
    50     v = INT_TO_JSVAL(mFramerate);
    51     if (!JS_SetProperty(aCx, o, "framerate", v)) {
    52       return NS_ERROR_FAILURE;
    53     }
    54   }
    55   if (mWidth != -1) {
    56     v = INT_TO_JSVAL(mWidth);
    57     if (!JS_SetProperty(aCx, o, "width", v)) {
    58       return NS_ERROR_FAILURE;
    59     }
    60   }
    61   if (mHeight != -1) {
    62     v = INT_TO_JSVAL(mHeight);
    63     if (!JS_SetProperty(aCx, o, "height", v)) {
    64       return NS_ERROR_FAILURE;
    65     }
    66   }
    68   *aObject = o;
    69   return NS_OK;
    70 }
    72 /**
    73  * Audio profile implementation.
    74  */
    75 RecorderAudioProfile::RecorderAudioProfile(uint32_t aCameraId, uint32_t aQualityIndex)
    76   : mCameraId(aCameraId)
    77   , mQualityIndex(aQualityIndex)
    78 {
    79   DOM_CAMERA_LOGT("%s:%d : this=%p\n", __func__, __LINE__, this);
    80 }
    82 RecorderAudioProfile::~RecorderAudioProfile()
    83 {
    84   DOM_CAMERA_LOGT("%s:%d : this=%p\n", __func__, __LINE__, this);
    85 }
    87 nsresult
    88 RecorderAudioProfile::GetJsObject(JSContext* aCx, JSObject** aObject)
    89 {
    90   NS_ENSURE_TRUE(aObject, NS_ERROR_INVALID_ARG);
    92   JS::Rooted<JSObject*> o(aCx, JS_NewObject(aCx, nullptr, JS::NullPtr(), JS::NullPtr()));
    93   NS_ENSURE_TRUE(o, NS_ERROR_OUT_OF_MEMORY);
    95   const char* codec = GetCodecName();
    96   NS_ENSURE_TRUE(codec, NS_ERROR_FAILURE);
    98   JS::Rooted<JSString*> s(aCx, JS_NewStringCopyZ(aCx, codec));
    99   JS::Rooted<JS::Value> v(aCx, STRING_TO_JSVAL(s));
   100   if (!JS_SetProperty(aCx, o, "codec", v)) {
   101     return NS_ERROR_FAILURE;
   102   }
   104   if (mBitrate != -1) {
   105     v = INT_TO_JSVAL(mBitrate);
   106     if (!JS_SetProperty(aCx, o, "bitrate", v)) {
   107       return NS_ERROR_FAILURE;
   108     }
   109   }
   110   if (mSamplerate != -1) {
   111     v = INT_TO_JSVAL(mSamplerate);
   112     if (!JS_SetProperty(aCx, o, "samplerate", v)) {
   113       return NS_ERROR_FAILURE;
   114     }
   115   }
   116   if (mChannels != -1) {
   117     v = INT_TO_JSVAL(mChannels);
   118     if (!JS_SetProperty(aCx, o, "channels", v)) {
   119       return NS_ERROR_FAILURE;
   120     }
   121   }
   123   *aObject = o;
   124   return NS_OK;
   125 }
   127 /**
   128  * Recorder Profile
   129  */
   130 RecorderProfile::RecorderProfile(uint32_t aCameraId, uint32_t aQualityIndex)
   131   : mCameraId(aCameraId)
   132   , mQualityIndex(aQualityIndex)
   133   , mName(nullptr)
   134 {
   135   DOM_CAMERA_LOGT("%s:%d : this=%p\n", __func__, __LINE__, this);
   136 }
   138 RecorderProfile::~RecorderProfile()
   139 {
   140   DOM_CAMERA_LOGT("%s:%d : this=%p\n", __func__, __LINE__, this);
   141 }
   143 /**
   144  * Recorder profile manager implementation.
   145  */
   146 RecorderProfileManager::RecorderProfileManager(uint32_t aCameraId)
   147   : mCameraId(aCameraId)
   148 {
   149   DOM_CAMERA_LOGT("%s:%d : this=%p\n", __func__, __LINE__, this);
   150 }
   152 RecorderProfileManager::~RecorderProfileManager()
   153 {
   154   DOM_CAMERA_LOGT("%s:%d : this=%p\n", __func__, __LINE__, this);
   155 }
   157 nsresult
   158 RecorderProfileManager::GetJsObject(JSContext* aCx, JSObject** aObject) const
   159 {
   160   NS_ENSURE_TRUE(aObject, NS_ERROR_INVALID_ARG);
   162   JS::Rooted<JSObject*> o(aCx, JS_NewObject(aCx, nullptr, JS::NullPtr(), JS::NullPtr()));
   163   if (!o) {
   164     return NS_ERROR_OUT_OF_MEMORY;
   165   }
   167   for (uint32_t q = 0; q < GetMaxQualityIndex(); ++q) {
   168     if (!IsSupported(q)) {
   169       continue;
   170     }
   172     nsRefPtr<RecorderProfile> profile = Get(q);
   173     if (!profile) {
   174       return NS_ERROR_OUT_OF_MEMORY;
   175     }
   177     const char* profileName = profile->GetName();
   178     if (!profileName) {
   179       // don't allow anonymous recorder profiles
   180       continue;
   181     }
   183     JS::Rooted<JSObject*> p(aCx);
   184     nsresult rv = profile->GetJsObject(aCx, p.address());
   185     NS_ENSURE_SUCCESS(rv, rv);
   186     JS::Rooted<JS::Value> v(aCx, OBJECT_TO_JSVAL(p));
   188     if (!JS_SetProperty(aCx, o, profileName, v)) {
   189       return NS_ERROR_FAILURE;
   190     }
   191   }
   193   *aObject = o;
   194   return NS_OK;
   195 }

mercurial