Upstream version 9.37.197.0
[platform/framework/web/crosswalk.git] / src / media / base / android / java / src / org / chromium / media / MediaPlayerBridge.java
index a5299d9..d575c27 100644 (file)
@@ -8,6 +8,8 @@ import android.content.Context;
 import android.media.MediaPlayer;
 import android.net.Uri;
 import android.os.AsyncTask;
+import android.os.Build;
+import android.os.ParcelFileDescriptor;
 import android.text.TextUtils;
 import android.util.Base64;
 import android.util.Base64InputStream;
@@ -156,6 +158,12 @@ public class MediaPlayerBridge {
         if (hideUrlLog) headersMap.put("x-hide-urls-from-log", "true");
         if (!TextUtils.isEmpty(cookies)) headersMap.put("Cookie", cookies);
         if (!TextUtils.isEmpty(userAgent)) headersMap.put("User-Agent", userAgent);
+        // The security origin check is enforced for devices above K. For devices below K,
+        // only anonymous media HTTP request (no cookies) may be considered same-origin.
+        // Note that if the server rejects the request we must not consider it same-origin.
+        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
+            headersMap.put("allow-cross-domain-redirect", "false");
+        }
         try {
             if (sResourceLoadFilter != null &&
                     sResourceLoadFilter.shouldOverrideResourceLoading(
@@ -170,6 +178,19 @@ public class MediaPlayerBridge {
     }
 
     @CalledByNative
+    protected boolean setDataSourceFromFd(int fd, long offset, long length) {
+        try {
+            ParcelFileDescriptor parcelFd = ParcelFileDescriptor.adoptFd(fd);
+            getLocalPlayer().setDataSource(parcelFd.getFileDescriptor(), offset, length);
+            parcelFd.close();
+            return true;
+        } catch (IOException e) {
+            Log.e(TAG, "Failed to set data source from file descriptor: " + e);
+            return false;
+        }
+    }
+
+    @CalledByNative
     protected boolean setDataUriDataSource(final Context context, final String url) {
         if (mLoadDataUriTask != null) {
             mLoadDataUriTask.cancel(true);