| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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.net; | 5 package org.chromium.net; |
| 6 | 6 |
| 7 import android.os.ParcelFileDescriptor; | 7 import android.os.ParcelFileDescriptor; |
| 8 | 8 |
| 9 import java.io.File; | 9 import java.io.File; |
| 10 import java.io.FileInputStream; | 10 import java.io.FileInputStream; |
| 11 import java.io.IOException; | 11 import java.io.IOException; |
| 12 import java.nio.ByteBuffer; | 12 import java.nio.ByteBuffer; |
| 13 import java.nio.channels.FileChannel; | 13 import java.nio.channels.FileChannel; |
| 14 | 14 |
| 15 /** | 15 /** |
| 16 * Provides implementations of {@link UploadDataProvider} for common use cases. | 16 * Provides implementations of {@link UploadDataProvider} for common use cases. |
| 17 */ | 17 */ |
| 18 public final class UploadDataProviders { | 18 public final class UploadDataProviders { |
| 19 /** | 19 /** |
| 20 * Uploads an entire file. | 20 * Uploads an entire file. |
| 21 * | 21 * |
| 22 * @param file The file to upload | 22 * @param file The file to upload |
| 23 * @return A new UploadDataProvider for the given file |
| 23 */ | 24 */ |
| 24 public static UploadDataProvider create(final File file) { | 25 public static UploadDataProvider create(final File file) { |
| 25 return new FileUploadProvider(new FileChannelProvider() { | 26 return new FileUploadProvider(new FileChannelProvider() { |
| 26 @Override | 27 @Override |
| 27 public FileChannel getChannel() throws IOException { | 28 public FileChannel getChannel() throws IOException { |
| 28 return new FileInputStream(file).getChannel(); | 29 return new FileInputStream(file).getChannel(); |
| 29 } | 30 } |
| 30 }); | 31 }); |
| 31 } | 32 } |
| 32 | 33 |
| 33 /** | 34 /** |
| 34 * Uploads an entire file, closing the descriptor when it is no longer neede
d. | 35 * Uploads an entire file, closing the descriptor when it is no longer neede
d. |
| 35 * | 36 * |
| 36 * @param fd The file descriptor to upload | 37 * @param fd The file descriptor to upload |
| 37 * @throws IllegalArgumentException if {@code fd} is not a file. | 38 * @throws IllegalArgumentException if {@code fd} is not a file. |
| 39 * @return A new UploadDataProvider for the given file descriptor |
| 38 */ | 40 */ |
| 39 public static UploadDataProvider create(final ParcelFileDescriptor fd) { | 41 public static UploadDataProvider create(final ParcelFileDescriptor fd) { |
| 40 return new FileUploadProvider(new FileChannelProvider() { | 42 return new FileUploadProvider(new FileChannelProvider() { |
| 41 @Override | 43 @Override |
| 42 public FileChannel getChannel() throws IOException { | 44 public FileChannel getChannel() throws IOException { |
| 43 if (fd.getStatSize() != -1) { | 45 if (fd.getStatSize() != -1) { |
| 44 return new ParcelFileDescriptor.AutoCloseInputStream(fd).get
Channel(); | 46 return new ParcelFileDescriptor.AutoCloseInputStream(fd).get
Channel(); |
| 45 } else { | 47 } else { |
| 46 fd.close(); | 48 fd.close(); |
| 47 throw new IllegalArgumentException("Not a file: " + fd); | 49 throw new IllegalArgumentException("Not a file: " + fd); |
| 48 } | 50 } |
| 49 } | 51 } |
| 50 }); | 52 }); |
| 51 } | 53 } |
| 52 | 54 |
| 53 /** | 55 /** |
| 54 * Uploads a ByteBuffer, from the current {@code buffer.position()} to {@cod
e buffer.limit()} | 56 * Uploads a ByteBuffer, from the current {@code buffer.position()} to {@cod
e buffer.limit()} |
| 57 * @param buffer The data to upload |
| 58 * @return A new UploadDataProvider for the given buffer |
| 55 */ | 59 */ |
| 56 public static UploadDataProvider create(ByteBuffer buffer) { | 60 public static UploadDataProvider create(ByteBuffer buffer) { |
| 57 return new ByteBufferUploadProvider(buffer.slice()); | 61 return new ByteBufferUploadProvider(buffer.slice()); |
| 58 } | 62 } |
| 59 | 63 |
| 60 /** Uploads {@code length} bytes from {@code data}, starting from {@code off
set} */ | 64 /** |
| 65 * Uploads {@code length} bytes from {@code data}, starting from {@code offs
et} |
| 66 * @param data Array containing data to upload |
| 67 * @param offset Offset within data to start with |
| 68 * @param length Number of bytes to upload |
| 69 * @return A new UploadDataProvider for the given data |
| 70 */ |
| 61 public static UploadDataProvider create(byte[] data, int offset, int length)
{ | 71 public static UploadDataProvider create(byte[] data, int offset, int length)
{ |
| 62 return new ByteBufferUploadProvider(ByteBuffer.wrap(data, offset, length
)); | 72 return new ByteBufferUploadProvider(ByteBuffer.wrap(data, offset, length
)); |
| 63 } | 73 } |
| 64 | 74 |
| 65 /** Uploads the contents of {@code data} */ | 75 /** |
| 76 * Uploads the contents of {@code data} |
| 77 * @param data Array containing data to upload |
| 78 * @return A new UploadDataProvider for the given data |
| 79 */ |
| 66 public static UploadDataProvider create(byte[] data) { | 80 public static UploadDataProvider create(byte[] data) { |
| 67 return create(data, 0, data.length); | 81 return create(data, 0, data.length); |
| 68 } | 82 } |
| 69 | 83 |
| 70 private interface FileChannelProvider { FileChannel getChannel() throws IOEx
ception; } | 84 private interface FileChannelProvider { FileChannel getChannel() throws IOEx
ception; } |
| 71 | 85 |
| 72 private static final class FileUploadProvider extends UploadDataProvider { | 86 private static final class FileUploadProvider extends UploadDataProvider { |
| 73 private volatile FileChannel mChannel; | 87 private volatile FileChannel mChannel; |
| 74 private final FileChannelProvider mProvider; | 88 private final FileChannelProvider mProvider; |
| 75 /** Guards initalization of {@code mChannel} */ | 89 /** Guards initalization of {@code mChannel} */ |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 @Override | 177 @Override |
| 164 public void rewind(UploadDataSink uploadDataSink) { | 178 public void rewind(UploadDataSink uploadDataSink) { |
| 165 mUploadBuffer.position(0); | 179 mUploadBuffer.position(0); |
| 166 uploadDataSink.onRewindSucceeded(); | 180 uploadDataSink.onRewindSucceeded(); |
| 167 } | 181 } |
| 168 } | 182 } |
| 169 | 183 |
| 170 // Prevent instantiation | 184 // Prevent instantiation |
| 171 private UploadDataProviders() {} | 185 private UploadDataProviders() {} |
| 172 } | 186 } |
| OLD | NEW |