Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(549)

Side by Side Diff: media/base/android/java/src/org/chromium/media/MediaPlayerBridge.java

Issue 2847523002: Android: Remove GetApplicationContext part 4 (Closed)
Patch Set: Rebase and fix build Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.media; 5 package org.chromium.media;
6 6
7 import android.content.Context;
8 import android.media.MediaPlayer; 7 import android.media.MediaPlayer;
9 import android.media.MediaPlayer.TrackInfo; 8 import android.media.MediaPlayer.TrackInfo;
10 import android.net.Uri; 9 import android.net.Uri;
11 import android.os.AsyncTask; 10 import android.os.AsyncTask;
12 import android.os.Build; 11 import android.os.Build;
13 import android.os.ParcelFileDescriptor; 12 import android.os.ParcelFileDescriptor;
14 import android.text.TextUtils; 13 import android.text.TextUtils;
15 import android.util.Base64; 14 import android.util.Base64;
16 import android.util.Base64InputStream; 15 import android.util.Base64InputStream;
17 import android.view.Surface; 16 import android.view.Surface;
18 17
18 import org.chromium.base.ContextUtils;
19 import org.chromium.base.Log; 19 import org.chromium.base.Log;
20 import org.chromium.base.StreamUtil; 20 import org.chromium.base.StreamUtil;
21 import org.chromium.base.annotations.CalledByNative; 21 import org.chromium.base.annotations.CalledByNative;
22 import org.chromium.base.annotations.JNINamespace; 22 import org.chromium.base.annotations.JNINamespace;
23 23
24 import java.io.ByteArrayInputStream; 24 import java.io.ByteArrayInputStream;
25 import java.io.File; 25 import java.io.File;
26 import java.io.FileOutputStream; 26 import java.io.FileOutputStream;
27 import java.io.IOException; 27 import java.io.IOException;
28 import java.io.InputStream; 28 import java.io.InputStream;
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 getLocalPlayer().pause(); 170 getLocalPlayer().pause();
171 } 171 }
172 172
173 @CalledByNative 173 @CalledByNative
174 protected void seekTo(int msec) throws IllegalStateException { 174 protected void seekTo(int msec) throws IllegalStateException {
175 getLocalPlayer().seekTo(msec); 175 getLocalPlayer().seekTo(msec);
176 } 176 }
177 177
178 @CalledByNative 178 @CalledByNative
179 protected boolean setDataSource( 179 protected boolean setDataSource(
180 Context context, String url, String cookies, String userAgent, boole an hideUrlLog) { 180 String url, String cookies, String userAgent, boolean hideUrlLog) {
181 Uri uri = Uri.parse(url); 181 Uri uri = Uri.parse(url);
182 HashMap<String, String> headersMap = new HashMap<String, String>(); 182 HashMap<String, String> headersMap = new HashMap<String, String>();
183 if (hideUrlLog) headersMap.put("x-hide-urls-from-log", "true"); 183 if (hideUrlLog) headersMap.put("x-hide-urls-from-log", "true");
184 if (!TextUtils.isEmpty(cookies)) headersMap.put("Cookie", cookies); 184 if (!TextUtils.isEmpty(cookies)) headersMap.put("Cookie", cookies);
185 if (!TextUtils.isEmpty(userAgent)) headersMap.put("User-Agent", userAgen t); 185 if (!TextUtils.isEmpty(userAgent)) headersMap.put("User-Agent", userAgen t);
186 // The security origin check is enforced for devices above K. For device s below K, 186 // The security origin check is enforced for devices above K. For device s below K,
187 // only anonymous media HTTP request (no cookies) may be considered same -origin. 187 // only anonymous media HTTP request (no cookies) may be considered same -origin.
188 // Note that if the server rejects the request we must not consider it s ame-origin. 188 // Note that if the server rejects the request we must not consider it s ame-origin.
189 if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) { 189 if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
190 headersMap.put("allow-cross-domain-redirect", "false"); 190 headersMap.put("allow-cross-domain-redirect", "false");
191 } 191 }
192 try { 192 try {
193 getLocalPlayer().setDataSource(context, uri, headersMap); 193 getLocalPlayer().setDataSource(ContextUtils.getApplicationContext(), uri, headersMap);
194 return true; 194 return true;
195 } catch (Exception e) { 195 } catch (Exception e) {
196 return false; 196 return false;
197 } 197 }
198 } 198 }
199 199
200 @CalledByNative 200 @CalledByNative
201 protected boolean setDataSourceFromFd(int fd, long offset, long length) { 201 protected boolean setDataSourceFromFd(int fd, long offset, long length) {
202 try { 202 try {
203 ParcelFileDescriptor parcelFd = ParcelFileDescriptor.adoptFd(fd); 203 ParcelFileDescriptor parcelFd = ParcelFileDescriptor.adoptFd(fd);
204 getLocalPlayer().setDataSource(parcelFd.getFileDescriptor(), offset, length); 204 getLocalPlayer().setDataSource(parcelFd.getFileDescriptor(), offset, length);
205 parcelFd.close(); 205 parcelFd.close();
206 return true; 206 return true;
207 } catch (IOException e) { 207 } catch (IOException e) {
208 Log.e(TAG, "Failed to set data source from file descriptor: " + e); 208 Log.e(TAG, "Failed to set data source from file descriptor: " + e);
209 return false; 209 return false;
210 } 210 }
211 } 211 }
212 212
213 @CalledByNative 213 @CalledByNative
214 protected boolean setDataUriDataSource(final Context context, final String u rl) { 214 protected boolean setDataUriDataSource(final String url) {
215 if (mLoadDataUriTask != null) { 215 if (mLoadDataUriTask != null) {
216 mLoadDataUriTask.cancel(true); 216 mLoadDataUriTask.cancel(true);
217 mLoadDataUriTask = null; 217 mLoadDataUriTask = null;
218 } 218 }
219 219
220 if (!url.startsWith("data:")) return false; 220 if (!url.startsWith("data:")) return false;
221 int headerStop = url.indexOf(','); 221 int headerStop = url.indexOf(',');
222 if (headerStop == -1) return false; 222 if (headerStop == -1) return false;
223 String header = url.substring(0, headerStop); 223 String header = url.substring(0, headerStop);
224 final String data = url.substring(headerStop + 1); 224 final String data = url.substring(headerStop + 1);
225 225
226 String headerContent = header.substring(5); 226 String headerContent = header.substring(5);
227 String headerInfo[] = headerContent.split(";"); 227 String headerInfo[] = headerContent.split(";");
228 if (headerInfo.length != 2) return false; 228 if (headerInfo.length != 2) return false;
229 if (!"base64".equals(headerInfo[1])) return false; 229 if (!"base64".equals(headerInfo[1])) return false;
230 230
231 mLoadDataUriTask = new LoadDataUriTask(context, data); 231 mLoadDataUriTask = new LoadDataUriTask(data);
232 mLoadDataUriTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 232 mLoadDataUriTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
233 return true; 233 return true;
234 } 234 }
235 235
236 private class LoadDataUriTask extends AsyncTask<Void, Void, Boolean> { 236 private class LoadDataUriTask extends AsyncTask<Void, Void, Boolean> {
237 private final String mData; 237 private final String mData;
238 private final Context mContext;
239 private File mTempFile; 238 private File mTempFile;
240 239
241 public LoadDataUriTask(Context context, String data) { 240 public LoadDataUriTask(String data) {
242 mData = data; 241 mData = data;
243 mContext = context;
244 } 242 }
245 243
246 @Override 244 @Override
247 protected Boolean doInBackground(Void... params) { 245 protected Boolean doInBackground(Void... params) {
248 FileOutputStream fos = null; 246 FileOutputStream fos = null;
249 try { 247 try {
250 mTempFile = File.createTempFile("decoded", "mediadata"); 248 mTempFile = File.createTempFile("decoded", "mediadata");
251 fos = new FileOutputStream(mTempFile); 249 fos = new FileOutputStream(mTempFile);
252 InputStream stream = new ByteArrayInputStream(mData.getBytes()); 250 InputStream stream = new ByteArrayInputStream(mData.getBytes());
253 Base64InputStream decoder = new Base64InputStream(stream, Base64 .DEFAULT); 251 Base64InputStream decoder = new Base64InputStream(stream, Base64 .DEFAULT);
(...skipping 13 matching lines...) Expand all
267 265
268 @Override 266 @Override
269 protected void onPostExecute(Boolean result) { 267 protected void onPostExecute(Boolean result) {
270 if (isCancelled()) { 268 if (isCancelled()) {
271 deleteFile(); 269 deleteFile();
272 return; 270 return;
273 } 271 }
274 272
275 if (result) { 273 if (result) {
276 try { 274 try {
277 getLocalPlayer().setDataSource(mContext, Uri.fromFile(mTempF ile)); 275 getLocalPlayer().setDataSource(
276 ContextUtils.getApplicationContext(), Uri.fromFile(m TempFile));
278 } catch (IOException e) { 277 } catch (IOException e) {
279 result = false; 278 result = false;
280 } 279 }
281 } 280 }
282 281
283 deleteFile(); 282 deleteFile();
284 assert (mNativeMediaPlayerBridge != 0); 283 assert (mNativeMediaPlayerBridge != 0);
285 nativeOnDidSetDataUriDataSource(mNativeMediaPlayerBridge, result); 284 nativeOnDidSetDataUriDataSource(mNativeMediaPlayerBridge, result);
286 } 285 }
287 286
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 Log.e(TAG, "Cannot access metadata: " + e); 388 Log.e(TAG, "Cannot access metadata: " + e);
390 } catch (NoSuchFieldException e) { 389 } catch (NoSuchFieldException e) {
391 Log.e(TAG, "Cannot find matching fields in Metadata class: " + e); 390 Log.e(TAG, "Cannot find matching fields in Metadata class: " + e);
392 } 391 }
393 return new AllowedOperations(canPause, canSeekForward, canSeekBackward); 392 return new AllowedOperations(canPause, canSeekForward, canSeekBackward);
394 } 393 }
395 394
396 private native void nativeOnDidSetDataUriDataSource(long nativeMediaPlayerBr idge, 395 private native void nativeOnDidSetDataUriDataSource(long nativeMediaPlayerBr idge,
397 boolean success); 396 boolean success);
398 } 397 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698