diff options
29 files changed, 1678 insertions, 529 deletions
diff --git a/cmds/stagefright/stagefright.cpp b/cmds/stagefright/stagefright.cpp index f8bb3c88da5c..4ffc8e437551 100644 --- a/cmds/stagefright/stagefright.cpp +++ b/cmds/stagefright/stagefright.cpp @@ -283,7 +283,7 @@ int main(int argc, char **argv) { CHECK(service.get() != NULL); - sp<IOMX> omx = service->createOMX(); + sp<IOMX> omx = service->getOMX(); CHECK(omx.get() != NULL); const char *kMimeTypes[] = { @@ -329,11 +329,11 @@ int main(int argc, char **argv) { CHECK(service.get() != NULL); - sp<IOMX> omx = service->createOMX(); + sp<IOMX> omx = service->getOMX(); CHECK(omx.get() != NULL); List<String8> list; - omx->list_nodes(&list); + omx->listNodes(&list); for (List<String8>::iterator it = list.begin(); it != list.end(); ++it) { diff --git a/core/java/android/server/BluetoothService.java b/core/java/android/server/BluetoothService.java index 67b30a9b0b90..d1dd3110286b 100644 --- a/core/java/android/server/BluetoothService.java +++ b/core/java/android/server/BluetoothService.java @@ -489,14 +489,15 @@ public class BluetoothService extends IBluetooth.Stub { // Parrot, Zhongshan General K-mate Electronics, Great Well // Electronics, Flaircomm Electronics, Jatty Electronics, Delphi, // Clarion, Novero, Denso (Lexus, Toyota), Johnson Controls (Acura), - // Continental Automotive, Harman/Becker, Panasonic/Kyushu Ten + // Continental Automotive, Harman/Becker, Panasonic/Kyushu Ten, + // BMW (Motorola PCS) private final ArrayList<String> mAutoPairingAddressBlacklist = new ArrayList<String>(Arrays.asList( "00:02:C7", "00:16:FE", "00:19:C1", "00:1B:FB", "00:1E:3D", "00:21:4F", "00:23:06", "00:24:33", "00:A0:79", "00:0E:6D", "00:13:E0", "00:21:E8", "00:60:57", "00:0E:9F", "00:12:1C", "00:18:91", "00:18:96", "00:13:04", "00:16:FD", "00:22:A0", "00:0B:4C", "00:60:6F", "00:23:3D", "00:C0:59", - "00:0A:30", "00:1E:AE", "00:1C:D7", "00:80:F0" + "00:0A:30", "00:1E:AE", "00:1C:D7", "00:80:F0", "00:12:8A" )); // List of names of Bluetooth devices for which auto pairing should be diff --git a/include/media/IMediaPlayerService.h b/include/media/IMediaPlayerService.h index 303444cd9112..d5c1594fd2a7 100644 --- a/include/media/IMediaPlayerService.h +++ b/include/media/IMediaPlayerService.h @@ -42,7 +42,7 @@ public: virtual sp<IMediaPlayer> create(pid_t pid, const sp<IMediaPlayerClient>& client, int fd, int64_t offset, int64_t length) = 0; virtual sp<IMemory> decode(const char* url, uint32_t *pSampleRate, int* pNumChannels, int* pFormat) = 0; virtual sp<IMemory> decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, int* pNumChannels, int* pFormat) = 0; - virtual sp<IOMX> createOMX() = 0; + virtual sp<IOMX> getOMX() = 0; // Take a peek at currently playing audio, for visualization purposes. // This returns a buffer of 16 bit mono PCM data, or NULL if no visualization buffer is currently available. diff --git a/include/media/IOMX.h b/include/media/IOMX.h index 10e0197b6b94..6f3ba1cfcbba 100644 --- a/include/media/IOMX.h +++ b/include/media/IOMX.h @@ -42,57 +42,57 @@ public: typedef void *buffer_id; typedef void *node_id; - virtual status_t list_nodes(List<String8> *list) = 0; + virtual status_t listNodes(List<String8> *list) = 0; - virtual status_t allocate_node(const char *name, node_id *node) = 0; - virtual status_t free_node(node_id node) = 0; + virtual status_t allocateNode( + const char *name, const sp<IOMXObserver> &observer, + node_id *node) = 0; - virtual status_t send_command( + virtual status_t freeNode(node_id node) = 0; + + virtual status_t sendCommand( node_id node, OMX_COMMANDTYPE cmd, OMX_S32 param) = 0; - virtual status_t get_parameter( + virtual status_t getParameter( node_id node, OMX_INDEXTYPE index, void *params, size_t size) = 0; - virtual status_t set_parameter( + virtual status_t setParameter( node_id node, OMX_INDEXTYPE index, const void *params, size_t size) = 0; - virtual status_t get_config( + virtual status_t getConfig( node_id node, OMX_INDEXTYPE index, void *params, size_t size) = 0; - virtual status_t set_config( + virtual status_t setConfig( node_id node, OMX_INDEXTYPE index, const void *params, size_t size) = 0; - virtual status_t use_buffer( + virtual status_t useBuffer( node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, buffer_id *buffer) = 0; - virtual status_t allocate_buffer( + virtual status_t allocateBuffer( node_id node, OMX_U32 port_index, size_t size, buffer_id *buffer) = 0; - virtual status_t allocate_buffer_with_backup( + virtual status_t allocateBufferWithBackup( node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, buffer_id *buffer) = 0; - virtual status_t free_buffer( + virtual status_t freeBuffer( node_id node, OMX_U32 port_index, buffer_id buffer) = 0; - virtual status_t observe_node( - node_id node, const sp<IOMXObserver> &observer) = 0; - - virtual void fill_buffer(node_id node, buffer_id buffer) = 0; + virtual status_t fillBuffer(node_id node, buffer_id buffer) = 0; - virtual void empty_buffer( + virtual status_t emptyBuffer( node_id node, buffer_id buffer, OMX_U32 range_offset, OMX_U32 range_length, OMX_U32 flags, OMX_TICKS timestamp) = 0; - virtual status_t get_extension_index( + virtual status_t getExtensionIndex( node_id node, const char *parameter_name, OMX_INDEXTYPE *index) = 0; @@ -162,7 +162,7 @@ class IOMXObserver : public IInterface { public: DECLARE_META_INTERFACE(OMXObserver); - virtual void on_message(const omx_message &msg) = 0; + virtual void onMessage(const omx_message &msg) = 0; }; class IOMXRenderer : public IInterface { diff --git a/include/media/stagefright/HTTPStream.h b/include/media/stagefright/HTTPStream.h index 3d0d67a26a0d..72e796c2bc88 100644 --- a/include/media/stagefright/HTTPStream.h +++ b/include/media/stagefright/HTTPStream.h @@ -21,7 +21,7 @@ #include <sys/types.h> #include <media/stagefright/MediaErrors.h> -#include <media/stagefright/string.h> +#include <media/stagefright/stagefright_string.h> #include <utils/KeyedVector.h> namespace android { diff --git a/include/media/stagefright/string.h b/include/media/stagefright/stagefright_string.h index 5dc711653f04..1ed4c8692655 100644 --- a/include/media/stagefright/string.h +++ b/include/media/stagefright/stagefright_string.h @@ -14,9 +14,9 @@ * limitations under the License. */ -#ifndef STRING_H_ +#ifndef STAGEFRIGHT_STRING_H_ -#define STRING_H_ +#define STAGEFRIGHT_STRING_H_ #include <utils/String8.h> @@ -51,4 +51,4 @@ private: } // namespace android -#endif // STRING_H_ +#endif // STAGEFRIGHT_STRING_H_ diff --git a/libs/rs/rsAllocation.cpp b/libs/rs/rsAllocation.cpp index 38cec64e3753..16029a6f9c57 100644 --- a/libs/rs/rsAllocation.cpp +++ b/libs/rs/rsAllocation.cpp @@ -104,6 +104,7 @@ void Allocation::uploadToTexture(uint32_t lodOffset) glGenTextures(1, &mTextureID); } glBindTexture(GL_TEXTURE_2D, mTextureID); + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); Adapter2D adapt(getContext(), this); for(uint32_t lod = 0; (lod + lodOffset) < mType->getLODCount(); lod++) { diff --git a/media/libmedia/IMediaPlayerService.cpp b/media/libmedia/IMediaPlayerService.cpp index 98f7ef18043c..cca3e9b104c2 100644 --- a/media/libmedia/IMediaPlayerService.cpp +++ b/media/libmedia/IMediaPlayerService.cpp @@ -35,7 +35,7 @@ enum { DECODE_FD, CREATE_MEDIA_RECORDER, CREATE_METADATA_RETRIEVER, - CREATE_OMX, + GET_OMX, SNOOP }; @@ -123,10 +123,10 @@ public: return interface_cast<IMemory>(reply.readStrongBinder()); } - virtual sp<IOMX> createOMX() { + virtual sp<IOMX> getOMX() { Parcel data, reply; data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); - remote()->transact(CREATE_OMX, data, &reply); + remote()->transact(GET_OMX, data, &reply); return interface_cast<IOMX>(reply.readStrongBinder()); } }; @@ -207,9 +207,9 @@ status_t BnMediaPlayerService::onTransact( reply->writeStrongBinder(retriever->asBinder()); return NO_ERROR; } break; - case CREATE_OMX: { + case GET_OMX: { CHECK_INTERFACE(IMediaPlayerService, data, reply); - sp<IOMX> omx = createOMX(); + sp<IOMX> omx = getOMX(); reply->writeStrongBinder(omx->asBinder()); return NO_ERROR; } break; diff --git a/media/libmedia/IOMX.cpp b/media/libmedia/IOMX.cpp index 0cec7bbe8c10..88a70649dd69 100644 --- a/media/libmedia/IOMX.cpp +++ b/media/libmedia/IOMX.cpp @@ -24,7 +24,6 @@ enum { ALLOC_BUFFER, ALLOC_BUFFER_WITH_BACKUP, FREE_BUFFER, - OBSERVE_NODE, FILL_BUFFER, EMPTY_BUFFER, GET_EXTENSION_INDEX, @@ -76,7 +75,7 @@ public: : BpInterface<IOMX>(impl) { } - virtual status_t list_nodes(List<String8> *list) { + virtual status_t listNodes(List<String8> *list) { list->clear(); Parcel data, reply; @@ -93,10 +92,12 @@ public: return OK; } - virtual status_t allocate_node(const char *name, node_id *node) { + virtual status_t allocateNode( + const char *name, const sp<IOMXObserver> &observer, node_id *node) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); data.writeCString(name); + data.writeStrongBinder(observer->asBinder()); remote()->transact(ALLOCATE_NODE, data, &reply); status_t err = reply.readInt32(); @@ -109,7 +110,7 @@ public: return err; } - virtual status_t free_node(node_id node) { + virtual status_t freeNode(node_id node) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); data.writeIntPtr((intptr_t)node); @@ -118,7 +119,7 @@ public: return reply.readInt32(); } - virtual status_t send_command( + virtual status_t sendCommand( node_id node, OMX_COMMANDTYPE cmd, OMX_S32 param) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); @@ -130,7 +131,7 @@ public: return reply.readInt32(); } - virtual status_t get_parameter( + virtual status_t getParameter( node_id node, OMX_INDEXTYPE index, void *params, size_t size) { Parcel data, reply; @@ -151,7 +152,7 @@ public: return OK; } - virtual status_t set_parameter( + virtual status_t setParameter( node_id node, OMX_INDEXTYPE index, const void *params, size_t size) { Parcel data, reply; @@ -165,7 +166,7 @@ public: return reply.readInt32(); } - virtual status_t get_config( + virtual status_t getConfig( node_id node, OMX_INDEXTYPE index, void *params, size_t size) { Parcel data, reply; @@ -186,7 +187,7 @@ public: return OK; } - virtual status_t set_config( + virtual status_t setConfig( node_id node, OMX_INDEXTYPE index, const void *params, size_t size) { Parcel data, reply; @@ -200,7 +201,7 @@ public: return reply.readInt32(); } - virtual status_t use_buffer( + virtual status_t useBuffer( node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, buffer_id *buffer) { Parcel data, reply; @@ -222,7 +223,7 @@ public: return err; } - virtual status_t allocate_buffer( + virtual status_t allocateBuffer( node_id node, OMX_U32 port_index, size_t size, buffer_id *buffer) { Parcel data, reply; @@ -244,7 +245,7 @@ public: return err; } - virtual status_t allocate_buffer_with_backup( + virtual status_t allocateBufferWithBackup( node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, buffer_id *buffer) { Parcel data, reply; @@ -266,7 +267,7 @@ public: return err; } - virtual status_t free_buffer( + virtual status_t freeBuffer( node_id node, OMX_U32 port_index, buffer_id buffer) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); @@ -278,26 +279,17 @@ public: return reply.readInt32(); } - virtual status_t observe_node( - node_id node, const sp<IOMXObserver> &observer) { - Parcel data, reply; - data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); - data.writeStrongBinder(observer->asBinder()); - remote()->transact(OBSERVE_NODE, data, &reply); - - return reply.readInt32(); - } - - virtual void fill_buffer(node_id node, buffer_id buffer) { + virtual status_t fillBuffer(node_id node, buffer_id buffer) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); data.writeIntPtr((intptr_t)node); data.writeIntPtr((intptr_t)buffer); remote()->transact(FILL_BUFFER, data, &reply, IBinder::FLAG_ONEWAY); + + return reply.readInt32(); } - virtual void empty_buffer( + virtual status_t emptyBuffer( node_id node, buffer_id buffer, OMX_U32 range_offset, OMX_U32 range_length, @@ -311,9 +303,11 @@ public: data.writeInt32(flags); data.writeInt64(timestamp); remote()->transact(EMPTY_BUFFER, data, &reply, IBinder::FLAG_ONEWAY); + + return reply.readInt32(); } - virtual status_t get_extension_index( + virtual status_t getExtensionIndex( node_id node, const char *parameter_name, OMX_INDEXTYPE *index) { @@ -375,7 +369,7 @@ status_t BnOMX::onTransact( CHECK_INTERFACE(IOMX, data, reply); List<String8> list; - list_nodes(&list); + listNodes(&list); reply->writeInt32(list.size()); for (List<String8>::iterator it = list.begin(); @@ -390,8 +384,14 @@ status_t BnOMX::onTransact( { CHECK_INTERFACE(IOMX, data, reply); + const char *name = data.readCString(); + + sp<IOMXObserver> observer = + interface_cast<IOMXObserver>(data.readStrongBinder()); + node_id node; - status_t err = allocate_node(data.readCString(), &node); + + status_t err = allocateNode(name, observer, &node); reply->writeInt32(err); if (err == OK) { reply->writeIntPtr((intptr_t)node); @@ -406,7 +406,7 @@ status_t BnOMX::onTransact( node_id node = (void*)data.readIntPtr(); - reply->writeInt32(free_node(node)); + reply->writeInt32(freeNode(node)); return NO_ERROR; } @@ -421,7 +421,7 @@ status_t BnOMX::onTransact( static_cast<OMX_COMMANDTYPE>(data.readInt32()); OMX_S32 param = data.readInt32(); - reply->writeInt32(send_command(node, cmd, param)); + reply->writeInt32(sendCommand(node, cmd, param)); return NO_ERROR; } @@ -439,7 +439,7 @@ status_t BnOMX::onTransact( void *params = malloc(size); data.read(params, size); - status_t err = get_parameter(node, index, params, size); + status_t err = getParameter(node, index, params, size); reply->writeInt32(err); @@ -463,7 +463,7 @@ status_t BnOMX::onTransact( size_t size = data.readInt32(); void *params = const_cast<void *>(data.readInplace(size)); - reply->writeInt32(set_parameter(node, index, params, size)); + reply->writeInt32(setParameter(node, index, params, size)); return NO_ERROR; } @@ -481,7 +481,7 @@ status_t BnOMX::onTransact( void *params = malloc(size); data.read(params, size); - status_t err = get_config(node, index, params, size); + status_t err = getConfig(node, index, params, size); reply->writeInt32(err); @@ -505,7 +505,7 @@ status_t BnOMX::onTransact( size_t size = data.readInt32(); void *params = const_cast<void *>(data.readInplace(size)); - reply->writeInt32(set_config(node, index, params, size)); + reply->writeInt32(setConfig(node, index, params, size)); return NO_ERROR; } @@ -520,7 +520,7 @@ status_t BnOMX::onTransact( interface_cast<IMemory>(data.readStrongBinder()); buffer_id buffer; - status_t err = use_buffer(node, port_index, params, &buffer); + status_t err = useBuffer(node, port_index, params, &buffer); reply->writeInt32(err); if (err == OK) { @@ -539,7 +539,7 @@ status_t BnOMX::onTransact( size_t size = data.readInt32(); buffer_id buffer; - status_t err = allocate_buffer(node, port_index, size, &buffer); + status_t err = allocateBuffer(node, port_index, size, &buffer); reply->writeInt32(err); if (err == OK) { @@ -559,7 +559,7 @@ status_t BnOMX::onTransact( interface_cast<IMemory>(data.readStrongBinder()); buffer_id buffer; - status_t err = allocate_buffer_with_backup( + status_t err = allocateBufferWithBackup( node, port_index, params, &buffer); reply->writeInt32(err); @@ -578,19 +578,7 @@ status_t BnOMX::onTransact( node_id node = (void*)data.readIntPtr(); OMX_U32 port_index = data.readInt32(); buffer_id buffer = (void*)data.readIntPtr(); - reply->writeInt32(free_buffer(node, port_index, buffer)); - - return NO_ERROR; - } - - case OBSERVE_NODE: - { - CHECK_INTERFACE(IOMX, data, reply); - - node_id node = (void*)data.readIntPtr(); - sp<IOMXObserver> observer = - interface_cast<IOMXObserver>(data.readStrongBinder()); - reply->writeInt32(observe_node(node, observer)); + reply->writeInt32(freeBuffer(node, port_index, buffer)); return NO_ERROR; } @@ -601,7 +589,7 @@ status_t BnOMX::onTransact( node_id node = (void*)data.readIntPtr(); buffer_id buffer = (void*)data.readIntPtr(); - fill_buffer(node, buffer); + reply->writeInt32(fillBuffer(node, buffer)); return NO_ERROR; } @@ -617,9 +605,10 @@ status_t BnOMX::onTransact( OMX_U32 flags = data.readInt32(); OMX_TICKS timestamp = data.readInt64(); - empty_buffer( - node, buffer, range_offset, range_length, - flags, timestamp); + reply->writeInt32( + emptyBuffer( + node, buffer, range_offset, range_length, + flags, timestamp)); return NO_ERROR; } @@ -632,7 +621,7 @@ status_t BnOMX::onTransact( const char *parameter_name = data.readCString(); OMX_INDEXTYPE index; - status_t err = get_extension_index(node, parameter_name, &index); + status_t err = getExtensionIndex(node, parameter_name, &index); reply->writeInt32(err); @@ -683,7 +672,7 @@ public: : BpInterface<IOMXObserver>(impl) { } - virtual void on_message(const omx_message &msg) { + virtual void onMessage(const omx_message &msg) { Parcel data, reply; data.writeInterfaceToken(IOMXObserver::getInterfaceDescriptor()); data.write(&msg, sizeof(msg)); @@ -705,7 +694,7 @@ status_t BnOMXObserver::onTransact( data.read(&msg, sizeof(msg)); // XXX Could use readInplace maybe? - on_message(msg); + onMessage(msg); return NO_ERROR; } diff --git a/media/libmediaplayerservice/Android.mk b/media/libmediaplayerservice/Android.mk index f21eb737bea6..fb569dab0590 100644 --- a/media/libmediaplayerservice/Android.mk +++ b/media/libmediaplayerservice/Android.mk @@ -50,7 +50,7 @@ LOCAL_C_INCLUDES := external/tremor/Tremor \ $(JNI_H_INCLUDE) \ $(call include-path-for, graphics corecg) \ $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include \ - $(TOP)/frameworks/base/media/libstagefright/omx + $(TOP)/frameworks/base/media/libstagefright/include LOCAL_MODULE:= libmediaplayerservice diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp index 0b75a2bf75f3..0a6c365df5ad 100644 --- a/media/libmediaplayerservice/MediaPlayerService.cpp +++ b/media/libmediaplayerservice/MediaPlayerService.cpp @@ -284,8 +284,14 @@ sp<IMediaPlayer> MediaPlayerService::create(pid_t pid, const sp<IMediaPlayerClie return c; } -sp<IOMX> MediaPlayerService::createOMX() { - return new OMX; +sp<IOMX> MediaPlayerService::getOMX() { + Mutex::Autolock autoLock(mLock); + + if (mOMX.get() == NULL) { + mOMX = new OMX; + } + + return mOMX; } status_t MediaPlayerService::AudioCache::dump(int fd, const Vector<String16>& args) const diff --git a/media/libmediaplayerservice/MediaPlayerService.h b/media/libmediaplayerservice/MediaPlayerService.h index 43c4915522ab..b00f5b747785 100644 --- a/media/libmediaplayerservice/MediaPlayerService.h +++ b/media/libmediaplayerservice/MediaPlayerService.h @@ -185,7 +185,7 @@ public: virtual sp<IMemory> decode(const char* url, uint32_t *pSampleRate, int* pNumChannels, int* pFormat); virtual sp<IMemory> decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, int* pNumChannels, int* pFormat); virtual sp<IMemory> snoop(); - virtual sp<IOMX> createOMX(); + virtual sp<IOMX> getOMX(); virtual status_t dump(int fd, const Vector<String16>& args); @@ -284,6 +284,7 @@ private: SortedVector< wp<Client> > mClients; SortedVector< wp<MediaRecorderClient> > mMediaRecorderClients; int32_t mNextConnId; + sp<IOMX> mOMX; }; // ---------------------------------------------------------------------------- diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index 8eabe5def29d..2cdc351b0f87 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -138,6 +138,12 @@ status_t MetadataRetrieverClient::setDataSource(const char *url) return UNKNOWN_ERROR; } player_type playerType = getPlayerType(url); +#if !defined(NO_OPENCORE) && defined(BUILD_WITH_FULL_STAGEFRIGHT) + if (playerType == STAGEFRIGHT_PLAYER) { + // Stagefright doesn't support metadata in this branch yet. + playerType = PV_PLAYER; + } +#endif LOGV("player type = %d", playerType); sp<MediaMetadataRetrieverBase> p = createRetriever(playerType); if (p == NULL) return NO_INIT; @@ -176,6 +182,12 @@ status_t MetadataRetrieverClient::setDataSource(int fd, int64_t offset, int64_t } player_type playerType = getPlayerType(fd, offset, length); +#if !defined(NO_OPENCORE) && defined(BUILD_WITH_FULL_STAGEFRIGHT) + if (playerType == STAGEFRIGHT_PLAYER) { + // Stagefright doesn't support metadata in this branch yet. + playerType = PV_PLAYER; + } +#endif LOGV("player type = %d", playerType); sp<MediaMetadataRetrieverBase> p = createRetriever(playerType); if (p == NULL) { diff --git a/media/libstagefright/Android.mk b/media/libstagefright/Android.mk index 3c343a3103a2..9f71dae9d36d 100644 --- a/media/libstagefright/Android.mk +++ b/media/libstagefright/Android.mk @@ -33,7 +33,7 @@ LOCAL_SRC_FILES += \ TimeSource.cpp \ TimedEventQueue.cpp \ AudioPlayer.cpp \ - string.cpp + stagefright_string.cpp endif diff --git a/media/libstagefright/HTTPDataSource.cpp b/media/libstagefright/HTTPDataSource.cpp index 698223b786b7..4dedebd43360 100644 --- a/media/libstagefright/HTTPDataSource.cpp +++ b/media/libstagefright/HTTPDataSource.cpp @@ -19,7 +19,7 @@ #include <media/stagefright/HTTPDataSource.h> #include <media/stagefright/HTTPStream.h> #include <media/stagefright/MediaDebug.h> -#include <media/stagefright/string.h> +#include <media/stagefright/stagefright_string.h> namespace android { diff --git a/media/libstagefright/OMXClient.cpp b/media/libstagefright/OMXClient.cpp index dba7a2a0115c..9de873eceed5 100644 --- a/media/libstagefright/OMXClient.cpp +++ b/media/libstagefright/OMXClient.cpp @@ -35,7 +35,7 @@ status_t OMXClient::connect() { CHECK(service.get() != NULL); - mOMX = service->createOMX(); + mOMX = service->getOMX(); CHECK(mOMX.get() != NULL); return OK; diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index e3f03c4043b0..ebf1e0c532d2 100644 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -85,12 +85,15 @@ static const CodecInfo kEncoderInfo[] = { #define CODEC_LOGV(x, ...) LOGV("[%s] "x, mComponentName, ##__VA_ARGS__) struct OMXCodecObserver : public BnOMXObserver { - OMXCodecObserver(const wp<OMXCodec> &target) - : mTarget(target) { + OMXCodecObserver() { + } + + void setCodec(const sp<OMXCodec> &target) { + mTarget = target; } // from IOMXObserver - virtual void on_message(const omx_message &msg) { + virtual void onMessage(const omx_message &msg) { sp<OMXCodec> codec = mTarget.promote(); if (codec.get() != NULL) { @@ -177,6 +180,7 @@ sp<OMXCodec> OMXCodec::Create( CHECK(success); const char *componentName = NULL; + sp<OMXCodecObserver> observer = new OMXCodecObserver; IOMX::node_id node = 0; for (int index = 0;; ++index) { if (createEncoder) { @@ -200,7 +204,7 @@ sp<OMXCodec> OMXCodec::Create( LOGV("Attempting to allocate OMX node '%s'", componentName); - status_t err = omx->allocate_node(componentName, &node); + status_t err = omx->allocateNode(componentName, observer, &node); if (err == OK) { LOGI("Successfully allocated OMX node '%s'", componentName); break; @@ -248,6 +252,8 @@ sp<OMXCodec> OMXCodec::Create( omx, node, quirks, createEncoder, mime, componentName, source); + observer->setCodec(codec); + uint32_t type; const void *data; size_t size; @@ -330,7 +336,9 @@ sp<OMXCodec> OMXCodec::Create( if (!strcmp(componentName, "OMX.TI.Video.Decoder") && (profile != kAVCProfileBaseline || level > 39)) { - // This stream exceeds the decoder's capabilities. + // This stream exceeds the decoder's capabilities. The decoder + // does not handle this gracefully and would clobber the heap + // and wreak havoc instead... LOGE("Profile and/or level exceed the decoder's capabilities."); return NULL; @@ -405,7 +413,7 @@ void OMXCodec::setMinBufferSize(OMX_U32 portIndex, OMX_U32 size) { InitOMXParams(&def); def.nPortIndex = portIndex; - status_t err = mOMX->get_parameter( + status_t err = mOMX->getParameter( mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); CHECK_EQ(err, OK); @@ -414,7 +422,7 @@ void OMXCodec::setMinBufferSize(OMX_U32 portIndex, OMX_U32 size) { } - err = mOMX->set_parameter( + err = mOMX->setParameter( mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); CHECK_EQ(err, OK); } @@ -432,7 +440,7 @@ status_t OMXCodec::setVideoPortFormatType( OMX_U32 index = 0; for (;;) { format.nIndex = index; - status_t err = mOMX->get_parameter( + status_t err = mOMX->getParameter( mNode, OMX_IndexParamVideoPortFormat, &format, sizeof(format)); @@ -477,8 +485,8 @@ status_t OMXCodec::setVideoPortFormatType( return UNKNOWN_ERROR; } - CODEC_LOGI("found a match."); - status_t err = mOMX->set_parameter( + CODEC_LOGV("found a match."); + status_t err = mOMX->setParameter( mNode, OMX_IndexParamVideoPortFormat, &format, sizeof(format)); @@ -521,7 +529,7 @@ void OMXCodec::setVideoInputFormat( OMX_VIDEO_PORTDEFINITIONTYPE *video_def = &def.format.video; - status_t err = mOMX->get_parameter( + status_t err = mOMX->getParameter( mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); CHECK_EQ(err, OK); @@ -533,7 +541,7 @@ void OMXCodec::setVideoInputFormat( video_def->eCompressionFormat = compressionFormat; video_def->eColorFormat = OMX_COLOR_FormatUnused; - err = mOMX->set_parameter( + err = mOMX->setParameter( mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); CHECK_EQ(err, OK); @@ -542,7 +550,7 @@ void OMXCodec::setVideoInputFormat( InitOMXParams(&def); def.nPortIndex = kPortIndexInput; - err = mOMX->get_parameter( + err = mOMX->getParameter( mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); CHECK_EQ(err, OK); @@ -556,7 +564,7 @@ void OMXCodec::setVideoInputFormat( video_def->eCompressionFormat = OMX_VIDEO_CodingUnused; video_def->eColorFormat = colorFormat; - err = mOMX->set_parameter( + err = mOMX->setParameter( mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); CHECK_EQ(err, OK); } @@ -587,7 +595,7 @@ void OMXCodec::setVideoOutputFormat( format.nPortIndex = kPortIndexOutput; format.nIndex = 0; - status_t err = mOMX->get_parameter( + status_t err = mOMX->getParameter( mNode, OMX_IndexParamVideoPortFormat, &format, sizeof(format)); CHECK_EQ(err, OK); @@ -600,7 +608,7 @@ void OMXCodec::setVideoOutputFormat( || format.eColorFormat == OMX_COLOR_FormatCbYCrY || format.eColorFormat == OMX_QCOM_COLOR_FormatYVU420SemiPlanar); - err = mOMX->set_parameter( + err = mOMX->setParameter( mNode, OMX_IndexParamVideoPortFormat, &format, sizeof(format)); CHECK_EQ(err, OK); @@ -613,7 +621,7 @@ void OMXCodec::setVideoOutputFormat( OMX_VIDEO_PORTDEFINITIONTYPE *video_def = &def.format.video; - status_t err = mOMX->get_parameter( + status_t err = mOMX->getParameter( mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); CHECK_EQ(err, OK); @@ -633,7 +641,7 @@ void OMXCodec::setVideoOutputFormat( video_def->eColorFormat = OMX_COLOR_FormatUnused; - err = mOMX->set_parameter( + err = mOMX->setParameter( mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); CHECK_EQ(err, OK); @@ -642,7 +650,7 @@ void OMXCodec::setVideoOutputFormat( InitOMXParams(&def); def.nPortIndex = kPortIndexOutput; - err = mOMX->get_parameter( + err = mOMX->getParameter( mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); CHECK_EQ(err, OK); CHECK_EQ(def.eDomain, OMX_PortDomainVideo); @@ -655,7 +663,7 @@ void OMXCodec::setVideoOutputFormat( video_def->nFrameWidth = width; video_def->nFrameHeight = height; - err = mOMX->set_parameter( + err = mOMX->setParameter( mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); CHECK_EQ(err, OK); } @@ -683,9 +691,6 @@ OMXCodec::OMXCodec( mPortStatus[kPortIndexInput] = ENABLED; mPortStatus[kPortIndexOutput] = ENABLED; - mObserver = new OMXCodecObserver(this); - mOMX->observe_node(mNode, mObserver); - setComponentRole(); } @@ -743,7 +748,7 @@ void OMXCodec::setComponentRole( roleParams.cRole[OMX_MAX_STRINGNAME_SIZE - 1] = '\0'; - status_t err = omx->set_parameter( + status_t err = omx->setParameter( node, OMX_IndexParamStandardComponentRole, &roleParams, sizeof(roleParams)); @@ -760,10 +765,7 @@ void OMXCodec::setComponentRole() { OMXCodec::~OMXCodec() { CHECK(mState == LOADED || mState == ERROR); - status_t err = mOMX->observe_node(mNode, NULL); - CHECK_EQ(err, OK); - - err = mOMX->free_node(mNode); + status_t err = mOMX->freeNode(mNode); CHECK_EQ(err, OK); mNode = NULL; @@ -785,7 +787,7 @@ status_t OMXCodec::init() { status_t err; if (!(mQuirks & kRequiresLoadedToIdleAfterAllocation)) { - err = mOMX->send_command(mNode, OMX_CommandStateSet, OMX_StateIdle); + err = mOMX->sendCommand(mNode, OMX_CommandStateSet, OMX_StateIdle); CHECK_EQ(err, OK); setState(LOADED_TO_IDLE); } @@ -794,7 +796,7 @@ status_t OMXCodec::init() { CHECK_EQ(err, OK); if (mQuirks & kRequiresLoadedToIdleAfterAllocation) { - err = mOMX->send_command(mNode, OMX_CommandStateSet, OMX_StateIdle); + err = mOMX->sendCommand(mNode, OMX_CommandStateSet, OMX_StateIdle); CHECK_EQ(err, OK); setState(LOADED_TO_IDLE); @@ -831,7 +833,7 @@ status_t OMXCodec::allocateBuffersOnPort(OMX_U32 portIndex) { InitOMXParams(&def); def.nPortIndex = portIndex; - status_t err = mOMX->get_parameter( + status_t err = mOMX->getParameter( mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); if (err != OK) { @@ -848,14 +850,14 @@ status_t OMXCodec::allocateBuffersOnPort(OMX_U32 portIndex) { IOMX::buffer_id buffer; if (portIndex == kPortIndexInput && (mQuirks & kRequiresAllocateBufferOnInputPorts)) { - err = mOMX->allocate_buffer_with_backup( + err = mOMX->allocateBufferWithBackup( mNode, portIndex, mem, &buffer); } else if (portIndex == kPortIndexOutput && (mQuirks & kRequiresAllocateBufferOnOutputPorts)) { - err = mOMX->allocate_buffer_with_backup( + err = mOMX->allocateBufferWithBackup( mNode, portIndex, mem, &buffer); } else { - err = mOMX->use_buffer(mNode, portIndex, mem, &buffer); + err = mOMX->useBuffer(mNode, portIndex, mem, &buffer); } if (err != OK) { @@ -922,7 +924,7 @@ void OMXCodec::on_message(const omx_message &msg) { CODEC_LOGV("Port is disabled, freeing buffer %p", buffer); status_t err = - mOMX->free_buffer(mNode, kPortIndexInput, buffer); + mOMX->freeBuffer(mNode, kPortIndexInput, buffer); CHECK_EQ(err, OK); buffers->removeAt(i); @@ -968,7 +970,7 @@ void OMXCodec::on_message(const omx_message &msg) { CODEC_LOGV("Port is disabled, freeing buffer %p", buffer); status_t err = - mOMX->free_buffer(mNode, kPortIndexOutput, buffer); + mOMX->freeBuffer(mNode, kPortIndexOutput, buffer); CHECK_EQ(err, OK); buffers->removeAt(i); @@ -1138,7 +1140,7 @@ void OMXCodec::onCmdComplete(OMX_COMMANDTYPE cmd, OMX_U32 data) { mPortStatus[kPortIndexOutput] = SHUTTING_DOWN; status_t err = - mOMX->send_command(mNode, OMX_CommandStateSet, OMX_StateIdle); + mOMX->sendCommand(mNode, OMX_CommandStateSet, OMX_StateIdle); CHECK_EQ(err, OK); } } else { @@ -1178,7 +1180,7 @@ void OMXCodec::onStateChange(OMX_STATETYPE newState) { { CODEC_LOGV("Now Idle."); if (mState == LOADED_TO_IDLE) { - status_t err = mOMX->send_command( + status_t err = mOMX->sendCommand( mNode, OMX_CommandStateSet, OMX_StateExecuting); CHECK_EQ(err, OK); @@ -1195,7 +1197,7 @@ void OMXCodec::onStateChange(OMX_STATETYPE newState) { countBuffersWeOwn(mPortBuffers[kPortIndexOutput]), mPortBuffers[kPortIndexOutput].size()); - status_t err = mOMX->send_command( + status_t err = mOMX->sendCommand( mNode, OMX_CommandStateSet, OMX_StateLoaded); CHECK_EQ(err, OK); @@ -1278,7 +1280,7 @@ status_t OMXCodec::freeBuffersOnPort( CODEC_LOGV("freeing buffer %p on port %ld", info->mBuffer, portIndex); status_t err = - mOMX->free_buffer(mNode, portIndex, info->mBuffer); + mOMX->freeBuffer(mNode, portIndex, info->mBuffer); if (err != OK) { stickyErr = err; @@ -1338,7 +1340,7 @@ bool OMXCodec::flushPortAsync(OMX_U32 portIndex) { } status_t err = - mOMX->send_command(mNode, OMX_CommandFlush, portIndex); + mOMX->sendCommand(mNode, OMX_CommandFlush, portIndex); CHECK_EQ(err, OK); return true; @@ -1351,7 +1353,7 @@ void OMXCodec::disablePortAsync(OMX_U32 portIndex) { mPortStatus[portIndex] = DISABLING; status_t err = - mOMX->send_command(mNode, OMX_CommandPortDisable, portIndex); + mOMX->sendCommand(mNode, OMX_CommandPortDisable, portIndex); CHECK_EQ(err, OK); freeBuffersOnPort(portIndex, true); @@ -1364,7 +1366,7 @@ void OMXCodec::enablePortAsync(OMX_U32 portIndex) { mPortStatus[portIndex] = ENABLING; status_t err = - mOMX->send_command(mNode, OMX_CommandPortEnable, portIndex); + mOMX->sendCommand(mNode, OMX_CommandPortEnable, portIndex); CHECK_EQ(err, OK); } @@ -1416,10 +1418,11 @@ void OMXCodec::drainInputBuffer(BufferInfo *info) { memcpy(info->mMem->pointer(), specific->mData, specific->mSize); } - mOMX->empty_buffer( + status_t err = mOMX->emptyBuffer( mNode, info->mBuffer, 0, size, OMX_BUFFERFLAG_ENDOFFRAME | OMX_BUFFERFLAG_CODECCONFIG, 0); + CHECK_EQ(err, OK); info->mOwnedByComponent = true; @@ -1472,16 +1475,21 @@ void OMXCodec::drainInputBuffer(BufferInfo *info) { } } - mOMX->empty_buffer( - mNode, info->mBuffer, 0, srcLength, - flags, timestamp); - - info->mOwnedByComponent = true; - if (srcBuffer != NULL) { srcBuffer->release(); srcBuffer = NULL; } + + err = mOMX->emptyBuffer( + mNode, info->mBuffer, 0, srcLength, + flags, timestamp); + + if (err != OK) { + setState(ERROR); + return; + } + + info->mOwnedByComponent = true; } void OMXCodec::fillOutputBuffer(BufferInfo *info) { @@ -1494,7 +1502,8 @@ void OMXCodec::fillOutputBuffer(BufferInfo *info) { } CODEC_LOGV("Calling fill_buffer on buffer %p", info->mBuffer); - mOMX->fill_buffer(mNode, info->mBuffer); + status_t err = mOMX->fillBuffer(mNode, info->mBuffer); + CHECK_EQ(err, OK); info->mOwnedByComponent = true; } @@ -1538,7 +1547,7 @@ void OMXCodec::setRawAudioFormat( InitOMXParams(&pcmParams); pcmParams.nPortIndex = portIndex; - status_t err = mOMX->get_parameter( + status_t err = mOMX->getParameter( mNode, OMX_IndexParamAudioPcm, &pcmParams, sizeof(pcmParams)); CHECK_EQ(err, OK); @@ -1559,7 +1568,7 @@ void OMXCodec::setRawAudioFormat( pcmParams.eChannelMapping[1] = OMX_AUDIO_ChannelRF; } - err = mOMX->set_parameter( + err = mOMX->setParameter( mNode, OMX_IndexParamAudioPcm, &pcmParams, sizeof(pcmParams)); CHECK_EQ(err, OK); @@ -1572,14 +1581,14 @@ void OMXCodec::setAMRFormat() { def.nPortIndex = kPortIndexInput; status_t err = - mOMX->get_parameter(mNode, OMX_IndexParamAudioAmr, &def, sizeof(def)); + mOMX->getParameter(mNode, OMX_IndexParamAudioAmr, &def, sizeof(def)); CHECK_EQ(err, OK); def.eAMRFrameFormat = OMX_AUDIO_AMRFrameFormatFSF; def.eAMRBandMode = OMX_AUDIO_AMRBandModeNB0; - err = mOMX->set_parameter(mNode, OMX_IndexParamAudioAmr, &def, sizeof(def)); + err = mOMX->setParameter(mNode, OMX_IndexParamAudioAmr, &def, sizeof(def)); CHECK_EQ(err, OK); } @@ -1603,14 +1612,14 @@ void OMXCodec::setAMRWBFormat() { def.nPortIndex = kPortIndexInput; status_t err = - mOMX->get_parameter(mNode, OMX_IndexParamAudioAmr, &def, sizeof(def)); + mOMX->getParameter(mNode, OMX_IndexParamAudioAmr, &def, sizeof(def)); CHECK_EQ(err, OK); def.eAMRFrameFormat = OMX_AUDIO_AMRFrameFormatFSF; def.eAMRBandMode = OMX_AUDIO_AMRBandModeWB0; - err = mOMX->set_parameter(mNode, OMX_IndexParamAudioAmr, &def, sizeof(def)); + err = mOMX->setParameter(mNode, OMX_IndexParamAudioAmr, &def, sizeof(def)); CHECK_EQ(err, OK); } @@ -1635,7 +1644,7 @@ void OMXCodec::setAACFormat(int32_t numChannels, int32_t sampleRate) { InitOMXParams(&profile); profile.nPortIndex = kPortIndexInput; - status_t err = mOMX->get_parameter( + status_t err = mOMX->getParameter( mNode, OMX_IndexParamAudioAac, &profile, sizeof(profile)); CHECK_EQ(err, OK); @@ -1643,7 +1652,7 @@ void OMXCodec::setAACFormat(int32_t numChannels, int32_t sampleRate) { profile.nSampleRate = sampleRate; profile.eAACStreamFormat = OMX_AUDIO_AACStreamFormatMP4ADTS; - err = mOMX->set_parameter( + err = mOMX->setParameter( mNode, OMX_IndexParamAudioAac, &profile, sizeof(profile)); CHECK_EQ(err, OK); } @@ -1667,7 +1676,7 @@ void OMXCodec::setImageOutputFormat( InitOMXParams(&def); def.nPortIndex = kPortIndexOutput; - status_t err = mOMX->get_parameter( + status_t err = mOMX->getParameter( mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); CHECK_EQ(err, OK); @@ -1716,7 +1725,7 @@ void OMXCodec::setImageOutputFormat( def.nBufferCountActual = def.nBufferCountMin; - err = mOMX->set_parameter( + err = mOMX->setParameter( mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); CHECK_EQ(err, OK); } @@ -1727,7 +1736,7 @@ void OMXCodec::setJPEGInputFormat( InitOMXParams(&def); def.nPortIndex = kPortIndexInput; - status_t err = mOMX->get_parameter( + status_t err = mOMX->getParameter( mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); CHECK_EQ(err, OK); @@ -1741,7 +1750,7 @@ void OMXCodec::setJPEGInputFormat( def.nBufferSize = compressedSize; def.nBufferCountActual = def.nBufferCountMin; - err = mOMX->set_parameter( + err = mOMX->setParameter( mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); CHECK_EQ(err, OK); } @@ -1831,7 +1840,7 @@ status_t OMXCodec::stop() { mPortStatus[kPortIndexOutput] = SHUTTING_DOWN; status_t err = - mOMX->send_command(mNode, OMX_CommandStateSet, OMX_StateIdle); + mOMX->sendCommand(mNode, OMX_CommandStateSet, OMX_StateIdle); CHECK_EQ(err, OK); } @@ -1868,9 +1877,24 @@ status_t OMXCodec::read( return UNKNOWN_ERROR; } + bool seeking = false; + int64_t seekTimeUs; + if (options && options->getSeekTo(&seekTimeUs)) { + seeking = true; + } + if (mInitialBufferSubmit) { mInitialBufferSubmit = false; + if (seeking) { + CHECK(seekTimeUs >= 0); + mSeekTimeUs = seekTimeUs; + + // There's no reason to trigger the code below, there's + // nothing to flush yet. + seeking = false; + } + drainInputBuffers(); if (mState == EXECUTING) { @@ -1880,8 +1904,7 @@ status_t OMXCodec::read( } } - int64_t seekTimeUs; - if (options && options->getSeekTo(&seekTimeUs)) { + if (seeking) { CODEC_LOGV("seeking to %lld us (%.2f secs)", seekTimeUs, seekTimeUs / 1E6); mSignalledEOS = false; @@ -2163,7 +2186,7 @@ void OMXCodec::dumpPortStatus(OMX_U32 portIndex) { InitOMXParams(&def); def.nPortIndex = portIndex; - status_t err = mOMX->get_parameter( + status_t err = mOMX->getParameter( mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); CHECK_EQ(err, OK); @@ -2229,7 +2252,7 @@ void OMXCodec::dumpPortStatus(OMX_U32 portIndex) { InitOMXParams(¶ms); params.nPortIndex = portIndex; - err = mOMX->get_parameter( + err = mOMX->getParameter( mNode, OMX_IndexParamAudioPcm, ¶ms, sizeof(params)); CHECK_EQ(err, OK); @@ -2248,7 +2271,7 @@ void OMXCodec::dumpPortStatus(OMX_U32 portIndex) { InitOMXParams(&amr); amr.nPortIndex = portIndex; - err = mOMX->get_parameter( + err = mOMX->getParameter( mNode, OMX_IndexParamAudioAmr, &amr, sizeof(amr)); CHECK_EQ(err, OK); @@ -2280,7 +2303,7 @@ void OMXCodec::initOutputFormat(const sp<MetaData> &inputFormat) { InitOMXParams(&def); def.nPortIndex = kPortIndexOutput; - status_t err = mOMX->get_parameter( + status_t err = mOMX->getParameter( mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); CHECK_EQ(err, OK); @@ -2306,7 +2329,7 @@ void OMXCodec::initOutputFormat(const sp<MetaData> &inputFormat) { InitOMXParams(¶ms); params.nPortIndex = kPortIndexOutput; - err = mOMX->get_parameter( + err = mOMX->getParameter( mNode, OMX_IndexParamAudioPcm, ¶ms, sizeof(params)); CHECK_EQ(err, OK); @@ -2338,7 +2361,7 @@ void OMXCodec::initOutputFormat(const sp<MetaData> &inputFormat) { InitOMXParams(&amr); amr.nPortIndex = kPortIndexOutput; - err = mOMX->get_parameter( + err = mOMX->getParameter( mNode, OMX_IndexParamAudioAmr, &amr, sizeof(amr)); CHECK_EQ(err, OK); @@ -2435,8 +2458,9 @@ status_t QueryCodecs( return OK; } + sp<OMXCodecObserver> observer = new OMXCodecObserver; IOMX::node_id node; - status_t err = omx->allocate_node(componentName, &node); + status_t err = omx->allocateNode(componentName, observer, &node); if (err != OK) { continue; @@ -2454,7 +2478,7 @@ status_t QueryCodecs( param.nPortIndex = queryDecoders ? 0 : 1; for (param.nProfileIndex = 0;; ++param.nProfileIndex) { - err = omx->get_parameter( + err = omx->getParameter( node, OMX_IndexParamVideoProfileLevelQuerySupported, ¶m, sizeof(param)); @@ -2469,7 +2493,7 @@ status_t QueryCodecs( caps->mProfileLevels.push(profileLevel); } - CHECK_EQ(omx->free_node(node), OK); + CHECK_EQ(omx->freeNode(node), OK); } } diff --git a/media/libstagefright/ShoutcastSource.cpp b/media/libstagefright/ShoutcastSource.cpp index 8e8f4fa38fd1..346b5aa7cd60 100644 --- a/media/libstagefright/ShoutcastSource.cpp +++ b/media/libstagefright/ShoutcastSource.cpp @@ -23,7 +23,7 @@ #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MetaData.h> #include <media/stagefright/ShoutcastSource.h> -#include <media/stagefright/string.h> +#include <media/stagefright/stagefright_string.h> namespace android { diff --git a/media/libstagefright/omx/OMX.h b/media/libstagefright/include/OMX.h index 6325f79c7bad..d0bd61e56373 100644 --- a/media/libstagefright/omx/OMX.h +++ b/media/libstagefright/include/OMX.h @@ -19,66 +19,67 @@ #include <media/IOMX.h> #include <utils/threads.h> +#include <utils/KeyedVector.h> namespace android { -class NodeMeta; +class OMXNodeInstance; -class OMX : public BnOMX { +class OMX : public BnOMX, + public IBinder::DeathRecipient { public: OMX(); - virtual status_t list_nodes(List<String8> *list); + virtual status_t listNodes(List<String8> *list); - virtual status_t allocate_node(const char *name, node_id *node); - virtual status_t free_node(node_id node); + virtual status_t allocateNode( + const char *name, const sp<IOMXObserver> &observer, node_id *node); - virtual status_t send_command( + virtual status_t freeNode(node_id node); + + virtual status_t sendCommand( node_id node, OMX_COMMANDTYPE cmd, OMX_S32 param); - virtual status_t get_parameter( + virtual status_t getParameter( node_id node, OMX_INDEXTYPE index, void *params, size_t size); - virtual status_t set_parameter( + virtual status_t setParameter( node_id node, OMX_INDEXTYPE index, const void *params, size_t size); - virtual status_t get_config( + virtual status_t getConfig( node_id node, OMX_INDEXTYPE index, void *params, size_t size); - virtual status_t set_config( + virtual status_t setConfig( node_id node, OMX_INDEXTYPE index, const void *params, size_t size); - virtual status_t use_buffer( + virtual status_t useBuffer( node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, buffer_id *buffer); - virtual status_t allocate_buffer( + virtual status_t allocateBuffer( node_id node, OMX_U32 port_index, size_t size, buffer_id *buffer); - virtual status_t allocate_buffer_with_backup( + virtual status_t allocateBufferWithBackup( node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, buffer_id *buffer); - virtual status_t free_buffer( + virtual status_t freeBuffer( node_id node, OMX_U32 port_index, buffer_id buffer); - virtual status_t observe_node( - node_id node, const sp<IOMXObserver> &observer); - - virtual void fill_buffer(node_id node, buffer_id buffer); + virtual status_t fillBuffer(node_id node, buffer_id buffer); - virtual void empty_buffer( + virtual status_t emptyBuffer( node_id node, buffer_id buffer, OMX_U32 range_offset, OMX_U32 range_length, OMX_U32 flags, OMX_TICKS timestamp); - virtual status_t get_extension_index( + virtual status_t getExtensionIndex( node_id node, const char *parameter_name, OMX_INDEXTYPE *index); @@ -90,44 +91,38 @@ public: size_t encodedWidth, size_t encodedHeight, size_t displayWidth, size_t displayHeight); -private: - static OMX_CALLBACKTYPE kCallbacks; - - Mutex mLock; - - struct CallbackDispatcher; - sp<CallbackDispatcher> mDispatcher; - - static OMX_ERRORTYPE OnEvent( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_PTR pAppData, - OMX_IN OMX_EVENTTYPE eEvent, - OMX_IN OMX_U32 nData1, - OMX_IN OMX_U32 nData2, - OMX_IN OMX_PTR pEventData); - - static OMX_ERRORTYPE OnEmptyBufferDone( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_PTR pAppData, - OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); - - static OMX_ERRORTYPE OnFillBufferDone( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_PTR pAppData, - OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); + virtual void binderDied(const wp<IBinder> &the_late_who); OMX_ERRORTYPE OnEvent( - NodeMeta *meta, + node_id node, OMX_IN OMX_EVENTTYPE eEvent, OMX_IN OMX_U32 nData1, OMX_IN OMX_U32 nData2, OMX_IN OMX_PTR pEventData); - + OMX_ERRORTYPE OnEmptyBufferDone( - NodeMeta *meta, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); + node_id node, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); OMX_ERRORTYPE OnFillBufferDone( - NodeMeta *meta, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); + node_id node, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); + + void invalidateNodeID(node_id node); + +private: + Mutex mLock; + + struct CallbackDispatcher; + sp<CallbackDispatcher> mDispatcher; + + int32_t mNodeCounter; + + KeyedVector<wp<IBinder>, OMXNodeInstance *> mLiveNodes; + KeyedVector<node_id, OMXNodeInstance *> mNodeIDToInstance; + + node_id makeNodeID(OMXNodeInstance *instance); + OMXNodeInstance *findInstance(node_id node); + + void invalidateNodeID_l(node_id node); OMX(const OMX &); OMX &operator=(const OMX &); diff --git a/media/libstagefright/include/OMXNodeInstance.h b/media/libstagefright/include/OMXNodeInstance.h new file mode 100644 index 000000000000..09a88169c040 --- /dev/null +++ b/media/libstagefright/include/OMXNodeInstance.h @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OMX_NODE_INSTANCE_H_ + +#define OMX_NODE_INSTANCE_H_ + +#include "OMX.h" + +#include <utils/RefBase.h> +#include <utils/threads.h> + +namespace android { + +class IOMXObserver; + +struct OMXNodeInstance { + OMXNodeInstance( + OMX *owner, const sp<IOMXObserver> &observer); + + void setHandle(OMX::node_id node_id, OMX_HANDLETYPE handle); + + OMX *owner(); + sp<IOMXObserver> observer(); + OMX::node_id nodeID(); + + status_t freeNode(); + + status_t sendCommand(OMX_COMMANDTYPE cmd, OMX_S32 param); + status_t getParameter(OMX_INDEXTYPE index, void *params, size_t size); + + status_t setParameter( + OMX_INDEXTYPE index, const void *params, size_t size); + + status_t getConfig(OMX_INDEXTYPE index, void *params, size_t size); + status_t setConfig(OMX_INDEXTYPE index, const void *params, size_t size); + + status_t useBuffer( + OMX_U32 portIndex, const sp<IMemory> ¶ms, + OMX::buffer_id *buffer); + + status_t allocateBuffer( + OMX_U32 portIndex, size_t size, OMX::buffer_id *buffer); + + status_t allocateBufferWithBackup( + OMX_U32 portIndex, const sp<IMemory> ¶ms, + OMX::buffer_id *buffer); + + status_t freeBuffer(OMX_U32 portIndex, OMX::buffer_id buffer); + + status_t fillBuffer(OMX::buffer_id buffer); + + status_t emptyBuffer( + OMX::buffer_id buffer, + OMX_U32 rangeOffset, OMX_U32 rangeLength, + OMX_U32 flags, OMX_TICKS timestamp); + + status_t getExtensionIndex( + const char *parameterName, OMX_INDEXTYPE *index); + + void onMessage(const omx_message &msg); + void onObserverDied(); + void onGetHandleFailed(); + + static OMX_CALLBACKTYPE kCallbacks; + +private: + Mutex mLock; + + OMX *mOwner; + OMX::node_id mNodeID; + OMX_HANDLETYPE mHandle; + sp<IOMXObserver> mObserver; + + struct ActiveBuffer { + OMX_U32 mPortIndex; + OMX::buffer_id mID; + }; + Vector<ActiveBuffer> mActiveBuffers; + + ~OMXNodeInstance(); + + void addActiveBuffer(OMX_U32 portIndex, OMX::buffer_id id); + void removeActiveBuffer(OMX_U32 portIndex, OMX::buffer_id id); + void freeActiveBuffers(); + + static OMX_ERRORTYPE OnEvent( + OMX_IN OMX_HANDLETYPE hComponent, + OMX_IN OMX_PTR pAppData, + OMX_IN OMX_EVENTTYPE eEvent, + OMX_IN OMX_U32 nData1, + OMX_IN OMX_U32 nData2, + OMX_IN OMX_PTR pEventData); + + static OMX_ERRORTYPE OnEmptyBufferDone( + OMX_IN OMX_HANDLETYPE hComponent, + OMX_IN OMX_PTR pAppData, + OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); + + static OMX_ERRORTYPE OnFillBufferDone( + OMX_IN OMX_HANDLETYPE hComponent, + OMX_IN OMX_PTR pAppData, + OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); + + OMXNodeInstance(const OMXNodeInstance &); + OMXNodeInstance &operator=(const OMXNodeInstance &); +}; + +} // namespace android + +#endif // OMX_NODE_INSTANCE_H_ + diff --git a/media/libstagefright/omx/Android.mk b/media/libstagefright/omx/Android.mk index 4cadccd82e87..20fb4f34a2e0 100644 --- a/media/libstagefright/omx/Android.mk +++ b/media/libstagefright/omx/Android.mk @@ -11,6 +11,7 @@ LOCAL_C_INCLUDES += $(JNI_H_INCLUDE) LOCAL_SRC_FILES:= \ OMX.cpp \ + OMXNodeInstance.cpp \ QComHardwareRenderer.cpp \ SoftwareRenderer.cpp \ TIHardwareRenderer.cpp diff --git a/media/libstagefright/omx/OMX.cpp b/media/libstagefright/omx/OMX.cpp index 8b83dd6ca61c..9ac0d44e025b 100644 --- a/media/libstagefright/omx/OMX.cpp +++ b/media/libstagefright/omx/OMX.cpp @@ -18,13 +18,13 @@ #define LOG_TAG "OMX" #include <utils/Log.h> -#include <sys/socket.h> - -#include "OMX.h" +#include "../include/OMX.h" #include "OMXRenderer.h" #include "pv_omxcore.h" +#include "../include/OMXNodeInstance.h" + #include <binder/IMemory.h> #include <media/stagefright/MediaDebug.h> #include <media/stagefright/QComHardwareRenderer.h> @@ -36,47 +36,10 @@ namespace android { -class NodeMeta { -public: - NodeMeta(OMX *owner) - : mOwner(owner), - mHandle(NULL) { - } - - OMX *owner() const { - return mOwner; - } - - void setHandle(OMX_HANDLETYPE handle) { - CHECK_EQ(mHandle, NULL); - mHandle = handle; - } - - OMX_HANDLETYPE handle() const { - return mHandle; - } - - void setObserver(const sp<IOMXObserver> &observer) { - mObserver = observer; - } - - sp<IOMXObserver> observer() { - return mObserver; - } - -private: - OMX *mOwner; - OMX_HANDLETYPE mHandle; - sp<IOMXObserver> mObserver; - - NodeMeta(const NodeMeta &); - NodeMeta &operator=(const NodeMeta &); -}; - //////////////////////////////////////////////////////////////////////////////// struct OMX::CallbackDispatcher : public RefBase { - CallbackDispatcher(); + CallbackDispatcher(OMX *owner); void post(const omx_message &msg); @@ -85,6 +48,8 @@ protected: private: Mutex mLock; + + OMX *mOwner; bool mDone; Condition mQueueChanged; List<omx_message> mQueue; @@ -100,8 +65,9 @@ private: CallbackDispatcher &operator=(const CallbackDispatcher &); }; -OMX::CallbackDispatcher::CallbackDispatcher() - : mDone(false) { +OMX::CallbackDispatcher::CallbackDispatcher(OMX *owner) + : mOwner(owner), + mDone(false) { pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); @@ -130,12 +96,12 @@ void OMX::CallbackDispatcher::post(const omx_message &msg) { } void OMX::CallbackDispatcher::dispatch(const omx_message &msg) { - NodeMeta *meta = static_cast<NodeMeta *>(msg.node); - - sp<IOMXObserver> observer = meta->observer(); - if (observer.get() != NULL) { - observer->on_message(msg); + OMXNodeInstance *instance = mOwner->findInstance(msg.node); + if (instance == NULL) { + LOGV("Would have dispatched a message to a node that's already gone."); + return; } + instance->onMessage(msg); } // static @@ -213,46 +179,30 @@ private: BufferMeta &operator=(const BufferMeta &); }; -// static -OMX_CALLBACKTYPE OMX::kCallbacks = { - &OnEvent, &OnEmptyBufferDone, &OnFillBufferDone -}; - -// static -OMX_ERRORTYPE OMX::OnEvent( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_PTR pAppData, - OMX_IN OMX_EVENTTYPE eEvent, - OMX_IN OMX_U32 nData1, - OMX_IN OMX_U32 nData2, - OMX_IN OMX_PTR pEventData) { - NodeMeta *meta = static_cast<NodeMeta *>(pAppData); - return meta->owner()->OnEvent(meta, eEvent, nData1, nData2, pEventData); +OMX::OMX() + : mDispatcher(new CallbackDispatcher(this)), + mNodeCounter(0) { } -// static -OMX_ERRORTYPE OMX::OnEmptyBufferDone( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_PTR pAppData, - OMX_IN OMX_BUFFERHEADERTYPE* pBuffer) { - NodeMeta *meta = static_cast<NodeMeta *>(pAppData); - return meta->owner()->OnEmptyBufferDone(meta, pBuffer); -} +void OMX::binderDied(const wp<IBinder> &the_late_who) { + OMXNodeInstance *instance; -// static -OMX_ERRORTYPE OMX::OnFillBufferDone( - OMX_IN OMX_HANDLETYPE hComponent, - OMX_IN OMX_PTR pAppData, - OMX_IN OMX_BUFFERHEADERTYPE* pBuffer) { - NodeMeta *meta = static_cast<NodeMeta *>(pAppData); - return meta->owner()->OnFillBufferDone(meta, pBuffer); -} + { + Mutex::Autolock autoLock(mLock); -OMX::OMX() - : mDispatcher(new CallbackDispatcher) { + ssize_t index = mLiveNodes.indexOfKey(the_late_who); + CHECK(index >= 0); + + instance = mLiveNodes.editValueAt(index); + mLiveNodes.removeItemsAt(index); + + invalidateNodeID_l(instance->nodeID()); + } + + instance->onObserverDied(); } -status_t OMX::list_nodes(List<String8> *list) { +status_t OMX::listNodes(List<String8> *list) { OMX_MasterInit(); // XXX Put this somewhere else. list->clear(); @@ -269,204 +219,132 @@ status_t OMX::list_nodes(List<String8> *list) { return OK; } -status_t OMX::allocate_node(const char *name, node_id *node) { +status_t OMX::allocateNode( + const char *name, const sp<IOMXObserver> &observer, node_id *node) { Mutex::Autolock autoLock(mLock); *node = 0; OMX_MasterInit(); // XXX Put this somewhere else. - NodeMeta *meta = new NodeMeta(this); + OMXNodeInstance *instance = new OMXNodeInstance(this, observer); OMX_HANDLETYPE handle; OMX_ERRORTYPE err = OMX_MasterGetHandle( - &handle, const_cast<char *>(name), meta, &kCallbacks); + &handle, const_cast<char *>(name), instance, + &OMXNodeInstance::kCallbacks); if (err != OMX_ErrorNone) { LOGE("FAILED to allocate omx component '%s'", name); - delete meta; - meta = NULL; + instance->onGetHandleFailed(); return UNKNOWN_ERROR; } - meta->setHandle(handle); + *node = makeNodeID(instance); - *node = meta; + instance->setHandle(*node, handle); + + mLiveNodes.add(observer->asBinder(), instance); + observer->asBinder()->linkToDeath(this); return OK; } -status_t OMX::free_node(node_id node) { - Mutex::Autolock autoLock(mLock); - - NodeMeta *meta = static_cast<NodeMeta *>(node); - - OMX_ERRORTYPE err = OMX_MasterFreeHandle(meta->handle()); +status_t OMX::freeNode(node_id node) { + OMXNodeInstance *instance = findInstance(node); - delete meta; - meta = NULL; + ssize_t index = mLiveNodes.indexOfKey(instance->observer()->asBinder()); + CHECK(index >= 0); + mLiveNodes.removeItemsAt(index); + instance->observer()->asBinder()->unlinkToDeath(this); - return (err != OMX_ErrorNone) ? UNKNOWN_ERROR : OK; + return instance->freeNode(); } -status_t OMX::send_command( +status_t OMX::sendCommand( node_id node, OMX_COMMANDTYPE cmd, OMX_S32 param) { - Mutex::Autolock autoLock(mLock); - - NodeMeta *meta = static_cast<NodeMeta *>(node); - OMX_ERRORTYPE err = OMX_SendCommand(meta->handle(), cmd, param, NULL); - - return (err != OMX_ErrorNone) ? UNKNOWN_ERROR : OK; + return findInstance(node)->sendCommand(cmd, param); } -status_t OMX::get_parameter( +status_t OMX::getParameter( node_id node, OMX_INDEXTYPE index, void *params, size_t size) { - Mutex::Autolock autoLock(mLock); - - NodeMeta *meta = static_cast<NodeMeta *>(node); - OMX_ERRORTYPE err = OMX_GetParameter(meta->handle(), index, params); - - return (err != OMX_ErrorNone) ? UNKNOWN_ERROR : OK; + return findInstance(node)->getParameter( + index, params, size); } -status_t OMX::set_parameter( +status_t OMX::setParameter( node_id node, OMX_INDEXTYPE index, const void *params, size_t size) { - Mutex::Autolock autoLock(mLock); - - NodeMeta *meta = static_cast<NodeMeta *>(node); - OMX_ERRORTYPE err = - OMX_SetParameter(meta->handle(), index, const_cast<void *>(params)); - - return (err != OMX_ErrorNone) ? UNKNOWN_ERROR : OK; + return findInstance(node)->setParameter( + index, params, size); } -status_t OMX::get_config( +status_t OMX::getConfig( node_id node, OMX_INDEXTYPE index, void *params, size_t size) { - Mutex::Autolock autoLock(mLock); - - NodeMeta *meta = static_cast<NodeMeta *>(node); - OMX_ERRORTYPE err = OMX_GetConfig(meta->handle(), index, params); - - return (err != OMX_ErrorNone) ? UNKNOWN_ERROR : OK; + return findInstance(node)->getConfig( + index, params, size); } -status_t OMX::set_config( +status_t OMX::setConfig( node_id node, OMX_INDEXTYPE index, const void *params, size_t size) { - Mutex::Autolock autoLock(mLock); - - NodeMeta *meta = static_cast<NodeMeta *>(node); - OMX_ERRORTYPE err = - OMX_SetConfig(meta->handle(), index, const_cast<void *>(params)); - - return (err != OMX_ErrorNone) ? UNKNOWN_ERROR : OK; + return findInstance(node)->setConfig( + index, params, size); } -status_t OMX::use_buffer( +status_t OMX::useBuffer( node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, buffer_id *buffer) { - Mutex::Autolock autoLock(mLock); - - BufferMeta *buffer_meta = new BufferMeta(this, params); - - OMX_BUFFERHEADERTYPE *header; - - NodeMeta *node_meta = static_cast<NodeMeta *>(node); - OMX_ERRORTYPE err = - OMX_UseBuffer(node_meta->handle(), &header, port_index, buffer_meta, - params->size(), static_cast<OMX_U8 *>(params->pointer())); - - if (err != OMX_ErrorNone) { - LOGE("OMX_UseBuffer failed with error %d (0x%08x)", err, err); - - delete buffer_meta; - buffer_meta = NULL; - - *buffer = 0; - return UNKNOWN_ERROR; - } - - *buffer = header; - - return OK; + return findInstance(node)->useBuffer( + port_index, params, buffer); } -status_t OMX::allocate_buffer( +status_t OMX::allocateBuffer( node_id node, OMX_U32 port_index, size_t size, buffer_id *buffer) { - Mutex::Autolock autoLock(mLock); - - BufferMeta *buffer_meta = new BufferMeta(this, size); - - OMX_BUFFERHEADERTYPE *header; - - NodeMeta *node_meta = static_cast<NodeMeta *>(node); - OMX_ERRORTYPE err = - OMX_AllocateBuffer(node_meta->handle(), &header, port_index, - buffer_meta, size); - - if (err != OMX_ErrorNone) { - delete buffer_meta; - buffer_meta = NULL; - - *buffer = 0; - return UNKNOWN_ERROR; - } - - *buffer = header; - - return OK; + return findInstance(node)->allocateBuffer( + port_index, size, buffer); } -status_t OMX::allocate_buffer_with_backup( +status_t OMX::allocateBufferWithBackup( node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, buffer_id *buffer) { - Mutex::Autolock autoLock(mLock); - - BufferMeta *buffer_meta = new BufferMeta(this, params, true); - - OMX_BUFFERHEADERTYPE *header; - - NodeMeta *node_meta = static_cast<NodeMeta *>(node); - OMX_ERRORTYPE err = - OMX_AllocateBuffer( - node_meta->handle(), &header, port_index, buffer_meta, - params->size()); - - if (err != OMX_ErrorNone) { - delete buffer_meta; - buffer_meta = NULL; - - *buffer = 0; - return UNKNOWN_ERROR; - } - - *buffer = header; - - return OK; + return findInstance(node)->allocateBufferWithBackup( + port_index, params, buffer); } -status_t OMX::free_buffer(node_id node, OMX_U32 port_index, buffer_id buffer) { - OMX_BUFFERHEADERTYPE *header = (OMX_BUFFERHEADERTYPE *)buffer; - BufferMeta *buffer_meta = static_cast<BufferMeta *>(header->pAppPrivate); +status_t OMX::freeBuffer(node_id node, OMX_U32 port_index, buffer_id buffer) { + return findInstance(node)->freeBuffer( + port_index, buffer); +} - NodeMeta *node_meta = static_cast<NodeMeta *>(node); - OMX_ERRORTYPE err = - OMX_FreeBuffer(node_meta->handle(), port_index, header); +status_t OMX::fillBuffer(node_id node, buffer_id buffer) { + return findInstance(node)->fillBuffer(buffer); +} - delete buffer_meta; - buffer_meta = NULL; +status_t OMX::emptyBuffer( + node_id node, + buffer_id buffer, + OMX_U32 range_offset, OMX_U32 range_length, + OMX_U32 flags, OMX_TICKS timestamp) { + return findInstance(node)->emptyBuffer( + buffer, range_offset, range_length, flags, timestamp); +} - return (err != OMX_ErrorNone) ? UNKNOWN_ERROR : OK; +status_t OMX::getExtensionIndex( + node_id node, + const char *parameter_name, + OMX_INDEXTYPE *index) { + return findInstance(node)->getExtensionIndex( + parameter_name, index); } OMX_ERRORTYPE OMX::OnEvent( - NodeMeta *meta, + node_id node, OMX_IN OMX_EVENTTYPE eEvent, OMX_IN OMX_U32 nData1, OMX_IN OMX_U32 nData2, @@ -475,7 +353,7 @@ OMX_ERRORTYPE OMX::OnEvent( omx_message msg; msg.type = omx_message::EVENT; - msg.node = meta; + msg.node = node; msg.u.event_data.event = eEvent; msg.u.event_data.data1 = nData1; msg.u.event_data.data2 = nData2; @@ -484,14 +362,14 @@ OMX_ERRORTYPE OMX::OnEvent( return OMX_ErrorNone; } - + OMX_ERRORTYPE OMX::OnEmptyBufferDone( - NodeMeta *meta, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer) { + node_id node, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer) { LOGV("OnEmptyBufferDone buffer=%p", pBuffer); omx_message msg; msg.type = omx_message::EMPTY_BUFFER_DONE; - msg.node = meta; + msg.node = node; msg.u.buffer_data.buffer = pBuffer; mDispatcher->post(msg); @@ -500,14 +378,12 @@ OMX_ERRORTYPE OMX::OnEmptyBufferDone( } OMX_ERRORTYPE OMX::OnFillBufferDone( - NodeMeta *meta, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer) { + node_id node, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer) { LOGV("OnFillBufferDone buffer=%p", pBuffer); - BufferMeta *buffer_meta = static_cast<BufferMeta *>(pBuffer->pAppPrivate); - buffer_meta->CopyFromOMX(pBuffer); omx_message msg; msg.type = omx_message::FILL_BUFFER_DONE; - msg.node = meta; + msg.node = node; msg.u.extended_buffer_data.buffer = pBuffer; msg.u.extended_buffer_data.range_offset = pBuffer->nOffset; msg.u.extended_buffer_data.range_length = pBuffer->nFilledLen; @@ -520,62 +396,31 @@ OMX_ERRORTYPE OMX::OnFillBufferDone( return OMX_ErrorNone; } -status_t OMX::observe_node( - node_id node, const sp<IOMXObserver> &observer) { - NodeMeta *node_meta = static_cast<NodeMeta *>(node); +OMX::node_id OMX::makeNodeID(OMXNodeInstance *instance) { + // mLock is already held. - node_meta->setObserver(observer); + node_id node = (node_id)++mNodeCounter; + mNodeIDToInstance.add(node, instance); - return OK; + return node; } -void OMX::fill_buffer(node_id node, buffer_id buffer) { - OMX_BUFFERHEADERTYPE *header = (OMX_BUFFERHEADERTYPE *)buffer; - header->nFilledLen = 0; - header->nOffset = 0; - header->nFlags = 0; +OMXNodeInstance *OMX::findInstance(node_id node) { + Mutex::Autolock autoLock(mLock); - NodeMeta *node_meta = static_cast<NodeMeta *>(node); + ssize_t index = mNodeIDToInstance.indexOfKey(node); - OMX_ERRORTYPE err = - OMX_FillThisBuffer(node_meta->handle(), header); - CHECK_EQ(err, OMX_ErrorNone); + return index < 0 ? NULL : mNodeIDToInstance.valueAt(index); } -void OMX::empty_buffer( - node_id node, - buffer_id buffer, - OMX_U32 range_offset, OMX_U32 range_length, - OMX_U32 flags, OMX_TICKS timestamp) { - OMX_BUFFERHEADERTYPE *header = (OMX_BUFFERHEADERTYPE *)buffer; - header->nFilledLen = range_length; - header->nOffset = range_offset; - header->nFlags = flags; - header->nTimeStamp = timestamp; - - BufferMeta *buffer_meta = - static_cast<BufferMeta *>(header->pAppPrivate); - buffer_meta->CopyToOMX(header); - - NodeMeta *node_meta = static_cast<NodeMeta *>(node); - - OMX_ERRORTYPE err = - OMX_EmptyThisBuffer(node_meta->handle(), header); - CHECK_EQ(err, OMX_ErrorNone); +void OMX::invalidateNodeID(node_id node) { + Mutex::Autolock autoLock(mLock); + invalidateNodeID_l(node); } -status_t OMX::get_extension_index( - node_id node, - const char *parameter_name, - OMX_INDEXTYPE *index) { - NodeMeta *node_meta = static_cast<NodeMeta *>(node); - - OMX_ERRORTYPE err = - OMX_GetExtensionIndex( - node_meta->handle(), - const_cast<char *>(parameter_name), index); - - return err == OMX_ErrorNone ? OK : UNKNOWN_ERROR; +void OMX::invalidateNodeID_l(node_id node) { + // mLock is held. + mNodeIDToInstance.removeItem(node); } //////////////////////////////////////////////////////////////////////////////// diff --git a/media/libstagefright/omx/OMXNodeInstance.cpp b/media/libstagefright/omx/OMXNodeInstance.cpp new file mode 100644 index 000000000000..821891862c4b --- /dev/null +++ b/media/libstagefright/omx/OMXNodeInstance.cpp @@ -0,0 +1,461 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +//#define LOG_NDEBUG 0 +#define LOG_TAG "OMXNodeInstance" +#include <utils/Log.h> + +#include "../include/OMXNodeInstance.h" + +#include "pv_omxcore.h" + +#include <binder/IMemory.h> +#include <media/stagefright/MediaDebug.h> + +namespace android { + +struct BufferMeta { + BufferMeta(const sp<IMemory> &mem, bool is_backup = false) + : mMem(mem), + mIsBackup(is_backup) { + } + + BufferMeta(size_t size) + : mSize(size), + mIsBackup(false) { + } + + void CopyFromOMX(const OMX_BUFFERHEADERTYPE *header) { + if (!mIsBackup) { + return; + } + + memcpy((OMX_U8 *)mMem->pointer() + header->nOffset, + header->pBuffer + header->nOffset, + header->nFilledLen); + } + + void CopyToOMX(const OMX_BUFFERHEADERTYPE *header) { + if (!mIsBackup) { + return; + } + + memcpy(header->pBuffer + header->nOffset, + (const OMX_U8 *)mMem->pointer() + header->nOffset, + header->nFilledLen); + } + +private: + sp<IMemory> mMem; + size_t mSize; + bool mIsBackup; + + BufferMeta(const BufferMeta &); + BufferMeta &operator=(const BufferMeta &); +}; + +// static +OMX_CALLBACKTYPE OMXNodeInstance::kCallbacks = { + &OnEvent, &OnEmptyBufferDone, &OnFillBufferDone +}; + +OMXNodeInstance::OMXNodeInstance( + OMX *owner, const sp<IOMXObserver> &observer) + : mOwner(owner), + mNodeID(NULL), + mHandle(NULL), + mObserver(observer) { +} + +OMXNodeInstance::~OMXNodeInstance() { + CHECK_EQ(mHandle, NULL); +} + +void OMXNodeInstance::setHandle(OMX::node_id node_id, OMX_HANDLETYPE handle) { + CHECK_EQ(mHandle, NULL); + mNodeID = node_id; + mHandle = handle; +} + +OMX *OMXNodeInstance::owner() { + return mOwner; +} + +sp<IOMXObserver> OMXNodeInstance::observer() { + return mObserver; +} + +OMX::node_id OMXNodeInstance::nodeID() { + return mNodeID; +} + +static status_t StatusFromOMXError(OMX_ERRORTYPE err) { + return (err == OMX_ErrorNone) ? OK : UNKNOWN_ERROR; +} + +status_t OMXNodeInstance::freeNode() { + // Transition the node from its current state all the way down + // to "Loaded". + // This ensures that all active buffers are properly freed even + // for components that don't do this themselves on a call to + // "FreeHandle". + + OMX_STATETYPE state; + CHECK_EQ(OMX_GetState(mHandle, &state), OMX_ErrorNone); + switch (state) { + case OMX_StateExecuting: + { + LOGV("forcing Executing->Idle"); + sendCommand(OMX_CommandStateSet, OMX_StateIdle); + OMX_ERRORTYPE err; + while ((err = OMX_GetState(mHandle, &state)) == OMX_ErrorNone + && state != OMX_StateIdle) { + usleep(100000); + } + CHECK_EQ(err, OMX_ErrorNone); + + // fall through + } + + case OMX_StateIdle: + { + LOGV("forcing Idle->Loaded"); + sendCommand(OMX_CommandStateSet, OMX_StateLoaded); + + freeActiveBuffers(); + + OMX_ERRORTYPE err; + while ((err = OMX_GetState(mHandle, &state)) == OMX_ErrorNone + && state != OMX_StateLoaded) { + LOGV("waiting for Loaded state..."); + usleep(100000); + } + CHECK_EQ(err, OMX_ErrorNone); + + // fall through + } + + case OMX_StateLoaded: + case OMX_StateInvalid: + break; + + default: + CHECK(!"should not be here, unknown state."); + break; + } + + OMX_ERRORTYPE err = OMX_MasterFreeHandle(mHandle); + mHandle = NULL; + + if (err != OMX_ErrorNone) { + LOGE("FreeHandle FAILED with error 0x%08x.", err); + } + + mOwner->invalidateNodeID(mNodeID); + mNodeID = NULL; + + LOGV("OMXNodeInstance going away."); + delete this; + + return StatusFromOMXError(err); +} + +status_t OMXNodeInstance::sendCommand( + OMX_COMMANDTYPE cmd, OMX_S32 param) { + Mutex::Autolock autoLock(mLock); + + OMX_ERRORTYPE err = OMX_SendCommand(mHandle, cmd, param, NULL); + return StatusFromOMXError(err); +} + +status_t OMXNodeInstance::getParameter( + OMX_INDEXTYPE index, void *params, size_t size) { + Mutex::Autolock autoLock(mLock); + + OMX_ERRORTYPE err = OMX_GetParameter(mHandle, index, params); + return StatusFromOMXError(err); +} + +status_t OMXNodeInstance::setParameter( + OMX_INDEXTYPE index, const void *params, size_t size) { + Mutex::Autolock autoLock(mLock); + + OMX_ERRORTYPE err = OMX_SetParameter( + mHandle, index, const_cast<void *>(params)); + + return StatusFromOMXError(err); +} + +status_t OMXNodeInstance::getConfig( + OMX_INDEXTYPE index, void *params, size_t size) { + Mutex::Autolock autoLock(mLock); + + OMX_ERRORTYPE err = OMX_GetConfig(mHandle, index, params); + return StatusFromOMXError(err); +} + +status_t OMXNodeInstance::setConfig( + OMX_INDEXTYPE index, const void *params, size_t size) { + Mutex::Autolock autoLock(mLock); + + OMX_ERRORTYPE err = OMX_SetConfig( + mHandle, index, const_cast<void *>(params)); + + return StatusFromOMXError(err); +} + +status_t OMXNodeInstance::useBuffer( + OMX_U32 portIndex, const sp<IMemory> ¶ms, + OMX::buffer_id *buffer) { + Mutex::Autolock autoLock(mLock); + + BufferMeta *buffer_meta = new BufferMeta(params); + + OMX_BUFFERHEADERTYPE *header; + + OMX_ERRORTYPE err = OMX_UseBuffer( + mHandle, &header, portIndex, buffer_meta, + params->size(), static_cast<OMX_U8 *>(params->pointer())); + + if (err != OMX_ErrorNone) { + LOGE("OMX_UseBuffer failed with error %d (0x%08x)", err, err); + + delete buffer_meta; + buffer_meta = NULL; + + *buffer = 0; + + return UNKNOWN_ERROR; + } + + *buffer = header; + + addActiveBuffer(portIndex, *buffer); + + return OK; +} + +status_t OMXNodeInstance::allocateBuffer( + OMX_U32 portIndex, size_t size, OMX::buffer_id *buffer) { + Mutex::Autolock autoLock(mLock); + + BufferMeta *buffer_meta = new BufferMeta(size); + + OMX_BUFFERHEADERTYPE *header; + + OMX_ERRORTYPE err = OMX_AllocateBuffer( + mHandle, &header, portIndex, buffer_meta, size); + + if (err != OMX_ErrorNone) { + LOGE("OMX_AllocateBuffer failed with error %d (0x%08x)", err, err); + + delete buffer_meta; + buffer_meta = NULL; + + *buffer = 0; + + return UNKNOWN_ERROR; + } + + *buffer = header; + + addActiveBuffer(portIndex, *buffer); + + return OK; +} + +status_t OMXNodeInstance::allocateBufferWithBackup( + OMX_U32 portIndex, const sp<IMemory> ¶ms, + OMX::buffer_id *buffer) { + Mutex::Autolock autoLock(mLock); + + BufferMeta *buffer_meta = new BufferMeta(params, true); + + OMX_BUFFERHEADERTYPE *header; + + OMX_ERRORTYPE err = OMX_AllocateBuffer( + mHandle, &header, portIndex, buffer_meta, params->size()); + + if (err != OMX_ErrorNone) { + LOGE("OMX_AllocateBuffer failed with error %d (0x%08x)", err, err); + + delete buffer_meta; + buffer_meta = NULL; + + *buffer = 0; + + return UNKNOWN_ERROR; + } + + *buffer = header; + + addActiveBuffer(portIndex, *buffer); + + return OK; +} + +status_t OMXNodeInstance::freeBuffer( + OMX_U32 portIndex, OMX::buffer_id buffer) { + Mutex::Autolock autoLock(mLock); + + removeActiveBuffer(portIndex, buffer); + + OMX_BUFFERHEADERTYPE *header = (OMX_BUFFERHEADERTYPE *)buffer; + BufferMeta *buffer_meta = static_cast<BufferMeta *>(header->pAppPrivate); + + OMX_ERRORTYPE err = OMX_FreeBuffer(mHandle, portIndex, header); + + delete buffer_meta; + buffer_meta = NULL; + + return StatusFromOMXError(err); +} + +status_t OMXNodeInstance::fillBuffer(OMX::buffer_id buffer) { + Mutex::Autolock autoLock(mLock); + + OMX_BUFFERHEADERTYPE *header = (OMX_BUFFERHEADERTYPE *)buffer; + header->nFilledLen = 0; + header->nOffset = 0; + header->nFlags = 0; + + OMX_ERRORTYPE err = OMX_FillThisBuffer(mHandle, header); + + return StatusFromOMXError(err); +} + +status_t OMXNodeInstance::emptyBuffer( + OMX::buffer_id buffer, + OMX_U32 rangeOffset, OMX_U32 rangeLength, + OMX_U32 flags, OMX_TICKS timestamp) { + Mutex::Autolock autoLock(mLock); + + OMX_BUFFERHEADERTYPE *header = (OMX_BUFFERHEADERTYPE *)buffer; + header->nFilledLen = rangeLength; + header->nOffset = rangeOffset; + header->nFlags = flags; + header->nTimeStamp = timestamp; + + BufferMeta *buffer_meta = + static_cast<BufferMeta *>(header->pAppPrivate); + buffer_meta->CopyToOMX(header); + + OMX_ERRORTYPE err = OMX_EmptyThisBuffer(mHandle, header); + + return StatusFromOMXError(err); +} + +status_t OMXNodeInstance::getExtensionIndex( + const char *parameterName, OMX_INDEXTYPE *index) { + Mutex::Autolock autoLock(mLock); + + OMX_ERRORTYPE err = OMX_GetExtensionIndex( + mHandle, const_cast<char *>(parameterName), index); + + return StatusFromOMXError(err); +} + +void OMXNodeInstance::onMessage(const omx_message &msg) { + if (msg.type == omx_message::FILL_BUFFER_DONE) { + OMX_BUFFERHEADERTYPE *buffer = + static_cast<OMX_BUFFERHEADERTYPE *>( + msg.u.extended_buffer_data.buffer); + + BufferMeta *buffer_meta = + static_cast<BufferMeta *>(buffer->pAppPrivate); + + buffer_meta->CopyFromOMX(buffer); + } + + mObserver->onMessage(msg); +} + +void OMXNodeInstance::onObserverDied() { + LOGE("!!! Observer died. Quickly, do something, ... anything..."); + + // Try to force shutdown of the node and hope for the best. + freeNode(); +} + +void OMXNodeInstance::onGetHandleFailed() { + delete this; +} + +// static +OMX_ERRORTYPE OMXNodeInstance::OnEvent( + OMX_IN OMX_HANDLETYPE hComponent, + OMX_IN OMX_PTR pAppData, + OMX_IN OMX_EVENTTYPE eEvent, + OMX_IN OMX_U32 nData1, + OMX_IN OMX_U32 nData2, + OMX_IN OMX_PTR pEventData) { + OMXNodeInstance *instance = static_cast<OMXNodeInstance *>(pAppData); + return instance->owner()->OnEvent( + instance->nodeID(), eEvent, nData1, nData2, pEventData); +} + +// static +OMX_ERRORTYPE OMXNodeInstance::OnEmptyBufferDone( + OMX_IN OMX_HANDLETYPE hComponent, + OMX_IN OMX_PTR pAppData, + OMX_IN OMX_BUFFERHEADERTYPE* pBuffer) { + OMXNodeInstance *instance = static_cast<OMXNodeInstance *>(pAppData); + return instance->owner()->OnEmptyBufferDone(instance->nodeID(), pBuffer); +} + +// static +OMX_ERRORTYPE OMXNodeInstance::OnFillBufferDone( + OMX_IN OMX_HANDLETYPE hComponent, + OMX_IN OMX_PTR pAppData, + OMX_IN OMX_BUFFERHEADERTYPE* pBuffer) { + OMXNodeInstance *instance = static_cast<OMXNodeInstance *>(pAppData); + return instance->owner()->OnFillBufferDone(instance->nodeID(), pBuffer); +} + +void OMXNodeInstance::addActiveBuffer(OMX_U32 portIndex, OMX::buffer_id id) { + ActiveBuffer active; + active.mPortIndex = portIndex; + active.mID = id; + mActiveBuffers.push(active); +} + +void OMXNodeInstance::removeActiveBuffer( + OMX_U32 portIndex, OMX::buffer_id id) { + bool found = false; + for (size_t i = 0; i < mActiveBuffers.size(); ++i) { + if (mActiveBuffers[i].mPortIndex == portIndex + && mActiveBuffers[i].mID == id) { + found = true; + mActiveBuffers.removeItemsAt(i); + break; + } + } + + if (!found) { + LOGW("Attempt to remove an active buffer we know nothing about..."); + } +} + +void OMXNodeInstance::freeActiveBuffers() { + // Make sure to count down here, as freeBuffer will in turn remove + // the active buffer from the vector... + for (size_t i = mActiveBuffers.size(); i--;) { + freeBuffer(mActiveBuffers[i].mPortIndex, mActiveBuffers[i].mID); + } +} + +} // namespace android + diff --git a/media/libstagefright/string.cpp b/media/libstagefright/stagefright_string.cpp index 5b1678403f8e..2aedb80739e2 100644 --- a/media/libstagefright/string.cpp +++ b/media/libstagefright/stagefright_string.cpp @@ -14,7 +14,7 @@ * limitations under the License. */ -#include <media/stagefright/string.h> +#include <media/stagefright/stagefright_string.h> namespace android { diff --git a/tests/DumpRenderTree/assets/results/layout_tests_crashed.txt b/tests/DumpRenderTree/assets/results/layout_tests_crashed.txt index e69de29bb2d1..89439d3dfa7b 100644 --- a/tests/DumpRenderTree/assets/results/layout_tests_crashed.txt +++ b/tests/DumpRenderTree/assets/results/layout_tests_crashed.txt @@ -0,0 +1,4 @@ +/sdcard/android/layout_tests/http/tests/xmlhttprequest/basic-auth.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/failed-auth.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/cross-origin-authorization.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/cross-origin-no-authorization.html diff --git a/tests/DumpRenderTree/assets/results/layout_tests_failed.txt b/tests/DumpRenderTree/assets/results/layout_tests_failed.txt index af7658b3deef..5b64b9a52807 100644 --- a/tests/DumpRenderTree/assets/results/layout_tests_failed.txt +++ b/tests/DumpRenderTree/assets/results/layout_tests_failed.txt @@ -27,19 +27,12 @@ /sdcard/android/layout_tests/accessibility/aria-label.html /sdcard/android/layout_tests/accessibility/textarea-line-for-index.html /sdcard/android/layout_tests/accessibility/nochildren-elements.html -/sdcard/android/layout_tests/animations/play-state.html -/sdcard/android/layout_tests/animations/animation-start-event-destroy-renderer.html -/sdcard/android/layout_tests/animations/import.html /sdcard/android/layout_tests/animations/keyframes-to-missing.html /sdcard/android/layout_tests/animations/animation-hit-test.html -/sdcard/android/layout_tests/animations/keyframes-comma-separated.html /sdcard/android/layout_tests/animations/animation-hit-test-transform.html -/sdcard/android/layout_tests/animations/keyframes-rule.html /sdcard/android/layout_tests/animations/animation-controller-drt-api.html /sdcard/android/layout_tests/animations/keyframes-from-missing.html -/sdcard/android/layout_tests/animations/animation-end-event-destroy-renderer.html /sdcard/android/layout_tests/animations/change-keyframes-name.html -/sdcard/android/layout_tests/animations/keyframes-out-of-order.html /sdcard/android/layout_tests/animations/change-keyframes.html /sdcard/android/layout_tests/editing/style/remove-underline-from-stylesheet.html /sdcard/android/layout_tests/editing/style/remove-underline-in-bold.html @@ -168,6 +161,7 @@ /sdcard/android/layout_tests/fast/encoding/utf-32-little-endian-nobom.xml /sdcard/android/layout_tests/fast/encoding/char-encoding-mac.html /sdcard/android/layout_tests/fast/encoding/charset-koi8-u.html +/sdcard/android/layout_tests/fast/workers/worker-location.html /sdcard/android/layout_tests/fast/selectors/lang-inheritance.html /sdcard/android/layout_tests/fast/selectors/lang-vs-xml-lang.html /sdcard/android/layout_tests/fast/selectors/lang-inheritance2.html @@ -228,6 +222,7 @@ /sdcard/android/layout_tests/fast/events/arrow-keys-on-body.html /sdcard/android/layout_tests/fast/events/ondragenter.html /sdcard/android/layout_tests/fast/events/pointer-events.html +/sdcard/android/layout_tests/fast/events/scroll-to-anchor-in-overflow-hidden.html /sdcard/android/layout_tests/fast/events/autoscroll-nonscrollable-iframe-in-scrollable-div.html /sdcard/android/layout_tests/fast/events/keypress-focus-change.html /sdcard/android/layout_tests/fast/events/key-events-in-input-text.html @@ -285,7 +280,9 @@ /sdcard/android/layout_tests/fast/dom/navigator-detached-no-crash.html /sdcard/android/layout_tests/fast/dom/object-embed-plugin-scripting.html /sdcard/android/layout_tests/fast/dom/node-filter-gc.html +/sdcard/android/layout_tests/fast/dom/noscript-canvas-in-created-html-document.html /sdcard/android/layout_tests/fast/dom/getClientRects.html +/sdcard/android/layout_tests/fast/dom/null-document-location-href-put-crash.html /sdcard/android/layout_tests/fast/dom/prototype-inheritance-2.html /sdcard/android/layout_tests/fast/dom/location-new-window-no-crash.html /sdcard/android/layout_tests/fast/dom/gc-9.html @@ -437,15 +434,8 @@ /sdcard/android/layout_tests/fast/css/resize-single-axis.html /sdcard/android/layout_tests/fast/css/percent-character-as-value.html /sdcard/android/layout_tests/fast/css/uri-token-parsing.html -/sdcard/android/layout_tests/fast/css/mask-missing-image-crash.html -/sdcard/android/layout_tests/fast/css/parse-timing-function-crash.html -/sdcard/android/layout_tests/fast/css/background-position-inherit.html -/sdcard/android/layout_tests/fast/css/readonly-pseudoclass-opera-003.html /sdcard/android/layout_tests/fast/css/zoom-body-scroll.html -/sdcard/android/layout_tests/fast/css/font-family-builtins.html /sdcard/android/layout_tests/fast/css/invalid-percentage-property.html -/sdcard/android/layout_tests/fast/css/remove-shorthand.html -/sdcard/android/layout_tests/fast/css/overflow-property.html /sdcard/android/layout_tests/fast/parser/external-entities-in-xslt.xml /sdcard/android/layout_tests/fast/parser/xml-declaration-missing-ending-mark.html /sdcard/android/layout_tests/fast/parser/tabindex-parsing.html @@ -458,6 +448,7 @@ /sdcard/android/layout_tests/fast/loader/local-iFrame-source-from-local.html /sdcard/android/layout_tests/fast/loader/null-request-after-willSendRequest.html /sdcard/android/layout_tests/fast/loader/stop-provisional-loads.html +/sdcard/android/layout_tests/fast/loader/location-port.html /sdcard/android/layout_tests/fast/loader/user-style-sheet-resource-load-callbacks.html /sdcard/android/layout_tests/fast/loader/policy-delegate-action-hit-test-zoomed.html /sdcard/android/layout_tests/fast/loader/subframe-navigate-during-main-frame-load.html @@ -532,11 +523,372 @@ /sdcard/android/layout_tests/fast/frames/frame-length-fractional.html /sdcard/android/layout_tests/fast/frames/iframe-name-and-id.html /sdcard/android/layout_tests/fast/loading/subframe-removes-itself.html +/sdcard/android/layout_tests/http/tests/media/video-seekable-stall.html +/sdcard/android/layout_tests/http/tests/media/remove-while-loading.html +/sdcard/android/layout_tests/http/tests/media/video-play-stall.html +/sdcard/android/layout_tests/http/tests/media/video-play-stall-seek.html +/sdcard/android/layout_tests/http/tests/plugins/npapi-response-headers.html +/sdcard/android/layout_tests/http/tests/plugins/get-url.html +/sdcard/android/layout_tests/http/tests/plugins/interrupted-get-url.html +/sdcard/android/layout_tests/http/tests/plugins/post-url-file.html +/sdcard/android/layout_tests/http/tests/plugins/cross-frame-object-access.html +/sdcard/android/layout_tests/http/tests/plugins/local-geturl-from-remote.html +/sdcard/android/layout_tests/http/tests/plugins/geturlnotify-from-npp-destroystream.html +/sdcard/android/layout_tests/http/tests/mime/standard-mode-does-not-load-stylesheet-with-text-plain-and-css-extension.html +/sdcard/android/layout_tests/http/tests/mime/standard-mode-does-not-load-stylesheet-with-text-plain.html +/sdcard/android/layout_tests/http/tests/local/drag-over-remote-content.html +/sdcard/android/layout_tests/http/tests/misc/image-blocked-src-change.html +/sdcard/android/layout_tests/http/tests/misc/acid3.html +/sdcard/android/layout_tests/http/tests/misc/dns-prefetch-control.html +/sdcard/android/layout_tests/http/tests/misc/will-send-request-returns-null-on-redirect.html +/sdcard/android/layout_tests/http/tests/misc/isindex-formdata.html +/sdcard/android/layout_tests/http/tests/misc/image-blocked-src-no-change.html +/sdcard/android/layout_tests/http/tests/misc/policy-delegate-called-twice.html +/sdcard/android/layout_tests/http/tests/misc/window-dot-stop.html +/sdcard/android/layout_tests/http/tests/misc/css-reject-any-type-in-strict-mode.html +/sdcard/android/layout_tests/http/tests/misc/favicon-loads-with-images-disabled.html +/sdcard/android/layout_tests/http/tests/misc/SVGFont-delayed-load.html +/sdcard/android/layout_tests/http/tests/misc/location-test-xsl-style-sheet.xml +/sdcard/android/layout_tests/http/tests/misc/redirect-to-external-url.html +/sdcard/android/layout_tests/http/tests/misc/submit-get-in-utf7.html +/sdcard/android/layout_tests/http/tests/cookies/simple-cookies-max-age.html +/sdcard/android/layout_tests/http/tests/cookies/simple-cookies-expired.html +/sdcard/android/layout_tests/http/tests/cookies/multiple-cookies.html +/sdcard/android/layout_tests/http/tests/wml/access-target-path-deny.html +/sdcard/android/layout_tests/http/tests/wml/post-data-to-server.html +/sdcard/android/layout_tests/http/tests/wml/go-task-get-method-accept-charset.html +/sdcard/android/layout_tests/http/tests/wml/access-target.html +/sdcard/android/layout_tests/http/tests/wml/access-target-domain-deny.html +/sdcard/android/layout_tests/http/tests/wml/go-task-post-method-accept-charset.html +/sdcard/android/layout_tests/http/tests/wml/go-task-get-method.html +/sdcard/android/layout_tests/http/tests/wml/go-task-post-method.html +/sdcard/android/layout_tests/http/tests/navigation/success200-reload.html +/sdcard/android/layout_tests/http/tests/navigation/redirect-cycle.html +/sdcard/android/layout_tests/http/tests/navigation/reload-subframe-frame.html +/sdcard/android/layout_tests/http/tests/navigation/window-open-adds-history-item.html +/sdcard/android/layout_tests/http/tests/navigation/success200-goback.html +/sdcard/android/layout_tests/http/tests/navigation/timerredirect-basic.html +/sdcard/android/layout_tests/http/tests/navigation/lockedhistory-iframe.html +/sdcard/android/layout_tests/http/tests/navigation/document-location-click-timeout.html +/sdcard/android/layout_tests/http/tests/navigation/post-goback2.html +/sdcard/android/layout_tests/http/tests/navigation/onload-navigation-iframe-timeout.html +/sdcard/android/layout_tests/http/tests/navigation/location-assign-adds-history-item.html +/sdcard/android/layout_tests/http/tests/navigation/anchor-goback.html +/sdcard/android/layout_tests/http/tests/navigation/redirect-load-no-form-restoration.html +/sdcard/android/layout_tests/http/tests/navigation/metaredirect-subframeload.html +/sdcard/android/layout_tests/http/tests/navigation/javascriptlink-subframeload.html +/sdcard/android/layout_tests/http/tests/navigation/metaredirect-basic.html +/sdcard/android/layout_tests/http/tests/navigation/success200-subframeload.html +/sdcard/android/layout_tests/http/tests/navigation/post-goback-same-url.html +/sdcard/android/layout_tests/http/tests/navigation/restore-form-state-https.html +/sdcard/android/layout_tests/http/tests/navigation/success200-frames.html +/sdcard/android/layout_tests/http/tests/navigation/redirect302-basic.html +/sdcard/android/layout_tests/http/tests/navigation/document-location-mouseover.html +/sdcard/android/layout_tests/http/tests/navigation/redirect302-goback.html +/sdcard/android/layout_tests/http/tests/navigation/anchor-subframeload.html +/sdcard/android/layout_tests/http/tests/navigation/target-frame-from-window.html +/sdcard/android/layout_tests/http/tests/navigation/slowmetaredirect-basic.html +/sdcard/android/layout_tests/http/tests/navigation/reload-subframe-iframe.html +/sdcard/android/layout_tests/http/tests/navigation/success200-loadsame.html +/sdcard/android/layout_tests/http/tests/navigation/relativeanchor-basic.html +/sdcard/android/layout_tests/http/tests/navigation/redirect302-subframeload.html +/sdcard/android/layout_tests/http/tests/navigation/relativeanchor-goback.html +/sdcard/android/layout_tests/http/tests/navigation/metaredirect-goback.html +/sdcard/android/layout_tests/http/tests/navigation/redirect302-frames.html +/sdcard/android/layout_tests/http/tests/navigation/multiple-back-forward-entries.html +/sdcard/android/layout_tests/http/tests/navigation/javascriptlink-goback.html +/sdcard/android/layout_tests/http/tests/navigation/success200-basic.html +/sdcard/android/layout_tests/http/tests/navigation/postredirect-goback2.html +/sdcard/android/layout_tests/http/tests/navigation/timerredirect-goback.html +/sdcard/android/layout_tests/http/tests/navigation/location-href-set-adds-history-item.html +/sdcard/android/layout_tests/http/tests/navigation/anchor-basic.html +/sdcard/android/layout_tests/http/tests/navigation/document-location-click.html +/sdcard/android/layout_tests/http/tests/navigation/onload-navigation-iframe.html +/sdcard/android/layout_tests/http/tests/navigation/relativeanchor-frames.html +/sdcard/android/layout_tests/http/tests/navigation/metaredirect-frames.html +/sdcard/android/layout_tests/http/tests/navigation/location-replace-adds-history-item.html +/sdcard/android/layout_tests/http/tests/navigation/success200-frames-loadsame.html +/sdcard/android/layout_tests/http/tests/navigation/back-to-slow-frame.html +/sdcard/android/layout_tests/http/tests/navigation/new-window-redirect-history.html +/sdcard/android/layout_tests/http/tests/navigation/javascriptlink-basic.html +/sdcard/android/layout_tests/http/tests/navigation/timerredirect-subframeload.html +/sdcard/android/layout_tests/http/tests/navigation/location-set-adds-history-item.html +/sdcard/android/layout_tests/http/tests/navigation/onload-navigation-iframe-2.html +/sdcard/android/layout_tests/http/tests/navigation/reload-subframe-object.html +/sdcard/android/layout_tests/http/tests/navigation/timerredirect-frames.html +/sdcard/android/layout_tests/http/tests/navigation/slowtimerredirect-basic.html +/sdcard/android/layout_tests/http/tests/navigation/window-open-adds-history-item2.html +/sdcard/android/layout_tests/http/tests/navigation/document-location-onload.html +/sdcard/android/layout_tests/http/tests/history/redirect-meta-refresh-2-seconds.html +/sdcard/android/layout_tests/http/tests/history/redirect-js-location-assign-before-load.html +/sdcard/android/layout_tests/http/tests/history/redirect-js-location-href-0-seconds.html +/sdcard/android/layout_tests/http/tests/history/redirect-js-location-href-2-seconds.html +/sdcard/android/layout_tests/http/tests/history/redirect-js-form-submit-0-seconds.html +/sdcard/android/layout_tests/http/tests/history/redirect-js-form-submit-2-seconds.html +/sdcard/android/layout_tests/http/tests/history/redirect-js-location-0-seconds.html +/sdcard/android/layout_tests/http/tests/history/redirect-js-location-2-seconds.html +/sdcard/android/layout_tests/http/tests/history/redirect-js-location-href-before-load.html +/sdcard/android/layout_tests/http/tests/history/redirect-js-location-replace-0-seconds.html +/sdcard/android/layout_tests/http/tests/history/redirect-js-location-replace-2-seconds.html +/sdcard/android/layout_tests/http/tests/history/redirect-js-document-location-0-seconds.html +/sdcard/android/layout_tests/http/tests/history/redirect-js-document-location-2-seconds.html +/sdcard/android/layout_tests/http/tests/history/redirect-js-form-submit-before-load.html +/sdcard/android/layout_tests/http/tests/history/redirect-js-location-assign-0-seconds.html +/sdcard/android/layout_tests/http/tests/history/redirect-js-location-assign-2-seconds.html +/sdcard/android/layout_tests/http/tests/history/redirect-js-location-before-load.html +/sdcard/android/layout_tests/http/tests/history/redirect-js-location-replace-before-load.html +/sdcard/android/layout_tests/http/tests/history/redirect-js-document-location-before-load.html +/sdcard/android/layout_tests/http/tests/history/redirect-meta-refresh-0-seconds.html +/sdcard/android/layout_tests/http/tests/cache/subresource-expiration.html +/sdcard/android/layout_tests/http/tests/appcache/local-content.html +/sdcard/android/layout_tests/http/tests/appcache/max-size.html +/sdcard/android/layout_tests/http/tests/security/aboutBlank/xss-DENIED-set-opener.html +/sdcard/android/layout_tests/http/tests/security/aboutBlank/xss-DENIED-navigate-opener-javascript-url.html +/sdcard/android/layout_tests/http/tests/security/aboutBlank/xss-DENIED-navigate-opener-document-write.html +/sdcard/android/layout_tests/http/tests/security/dataURL/xss-DENIED-from-javascript-url-window-open.html +/sdcard/android/layout_tests/http/tests/security/dataURL/xss-DENIED-to-data-url-sub-frame-2-level.html +/sdcard/android/layout_tests/http/tests/security/dataURL/xss-DENIED-from-data-url-in-foreign-domain-subframe.html +/sdcard/android/layout_tests/http/tests/security/dataURL/xss-DENIED-from-data-url-in-foreign-domain-window-open.html +/sdcard/android/layout_tests/http/tests/security/dataURL/xss-DENIED-to-data-url-in-foreign-domain-subframe-location-change.html +/sdcard/android/layout_tests/http/tests/security/dataURL/xss-DENIED-from-data-url-sub-frame.html +/sdcard/android/layout_tests/http/tests/security/dataURL/xss-DENIED-to-data-url-in-foreign-domain-subframe.html +/sdcard/android/layout_tests/http/tests/security/dataURL/xss-DENIED-to-data-url-in-foreign-domain-window-open.html +/sdcard/android/layout_tests/http/tests/security/dataURL/xss-DENIED-from-data-url-sub-frame-2-level.html +/sdcard/android/layout_tests/http/tests/security/dataURL/xss-DENIED-to-data-url-sub-frame-uppercase.html +/sdcard/android/layout_tests/http/tests/security/dataURL/xss-DENIED-to-data-url-window-open.html +/sdcard/android/layout_tests/http/tests/security/dataURL/xss-DENIED-from-data-url-sub-frame-to-data-url-sub-frame.html +/sdcard/android/layout_tests/http/tests/security/dataURL/xss-DENIED-from-data-url-to-data-url.html +/sdcard/android/layout_tests/http/tests/security/dataURL/xss-DENIED-to-data-url-from-data-url.html +/sdcard/android/layout_tests/http/tests/security/dataURL/xss-DENIED-to-data-url-sub-frame.html +/sdcard/android/layout_tests/http/tests/security/clipboard/clipboard-file-access.html +/sdcard/android/layout_tests/http/tests/security/isolatedWorld/image-prototype.html +/sdcard/android/layout_tests/http/tests/security/isolatedWorld/body-properties.html +/sdcard/android/layout_tests/http/tests/security/isolatedWorld/number-prototype.html +/sdcard/android/layout_tests/http/tests/security/isolatedWorld/body-prototype.html +/sdcard/android/layout_tests/http/tests/security/isolatedWorld/global-variables.html +/sdcard/android/layout_tests/http/tests/security/isolatedWorld/location-prototype.html +/sdcard/android/layout_tests/http/tests/security/isolatedWorld/image-properties.html +/sdcard/android/layout_tests/http/tests/security/isolatedWorld/document-open.html +/sdcard/android/layout_tests/http/tests/security/isolatedWorld/document-prototype.html +/sdcard/android/layout_tests/http/tests/security/isolatedWorld/window-properties.html +/sdcard/android/layout_tests/http/tests/security/isolatedWorld/location-properties.html +/sdcard/android/layout_tests/http/tests/security/isolatedWorld/all-window-prototypes.html +/sdcard/android/layout_tests/http/tests/security/isolatedWorld/click-event.html +/sdcard/android/layout_tests/http/tests/security/isolatedWorld/all-window-properties.html +/sdcard/android/layout_tests/http/tests/security/isolatedWorld/document-properties.html +/sdcard/android/layout_tests/http/tests/security/isolatedWorld/string-prototype.html +/sdcard/android/layout_tests/http/tests/security/isolatedWorld/object-prototype.html +/sdcard/android/layout_tests/http/tests/security/listener/xss-window-onclick-addEventListener.html +/sdcard/android/layout_tests/http/tests/security/listener/xss-window-onclick-shortcut.html +/sdcard/android/layout_tests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-allow.html +/sdcard/android/layout_tests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-deny.html +/sdcard/android/layout_tests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-in-body.html +/sdcard/android/layout_tests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag.html +/sdcard/android/layout_tests/http/tests/security/XFrameOptions/x-frame-options-parent-same-origin-allow.html +/sdcard/android/layout_tests/http/tests/security/XFrameOptions/x-frame-options-parent-same-origin-deny.html +/sdcard/android/layout_tests/http/tests/security/XFrameOptions/x-frame-options-deny.html +/sdcard/android/layout_tests/http/tests/security/frameNavigation/xss-ALLOWED-targeted-subframe-navigation-change.html +/sdcard/android/layout_tests/http/tests/security/frameNavigation/xss-DENIED-targeted-link-navigation.html +/sdcard/android/layout_tests/http/tests/security/frameNavigation/xss-DENIED-plugin-navigation.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/javascriptURL-execution-context-frame-src-setAttributeNode.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/javascriptURL-execution-context-frame-src-setAttributeNodeNS.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/javascriptURL-execution-context-iframe-src-setAttribute.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/javascriptURL-execution-context-iframe-src-setAttributeNS.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/javascriptURL-execution-context-iframe-src-setAttributeNode.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/javascriptURL-execution-context-iframe-src-setAttributeNodeNS.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/xss-ALLOWED-from-javascript-url-sub-frame-2-level.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/xss-ALLOWED-from-javascript-url-to-javscript-url.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/xss-ALLOWED-to-javascript-url-from-javscript-url.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/javascriptURL-execution-context-frame-src-getAttribute-value.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/javascriptURL-execution-context-iframe-src-htmldom.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/xss-ALLOWED-to-javascript-url-sub-frame-2-level.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/xss-ALLOWED-from-javascript-url-window-open.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/xss-DENIED-from-javascript-url-in-foreign-domain-window-open.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/javascriptURL-execution-context-frame-location-htmldom.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/javascriptURL-execution-context-iframe-src-getAttribute-value.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/xss-ALLOWED-from-javascript-url-sub-frame.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/xss-ALLOWED-from-javascript-url-sub-frame-to-javascript-url-sub-frame.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/xss-DENIED-to-javascript-url-in-foreign-domain-subframe.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/xss-ALLOWED-to-javascript-url-window-open.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/javascriptURL-execution-context-frame-src-htmldom.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/xss-DENIED-to-javascript-url-in-foreign-domain-window-open.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/xss-ALLOWED-to-javascript-url-sub-frame.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/javascriptURL-execution-context-frame-src-setAttribute.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/javascriptURL-execution-context-frame-src-setAttributeNS.html +/sdcard/android/layout_tests/http/tests/security/javascriptURL/xss-DENIED-from-javascript-url-in-foreign-domain-subframe.html +/sdcard/android/layout_tests/http/tests/security/originHeader/origin-header-for-empty.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/base-href-null-char.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/base-href-control-char.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/faux-script1.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/javascript-link-control-char.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-convoluted.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/dom-write-location.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/javascript-link-HTML-entities-control-char.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/object-embed-tag-control-char.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/javascript-link-null-char.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/anchor-url-dom-write-location.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/link-onclick-ampersand.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-with-source-double-quote.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-with-source-no-quote.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/base-href-safe3.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/http-equiv-utf-7-encoded.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/link-onclick-control-char.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/base-href-scheme-relative.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-open-redirect.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/object-embed-tag-null-char.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/faux-script3.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/link-onclick-entities.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-post.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/embed-tag-control-char.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/property-escape.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-post-null-char.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/javascript-link-HTML-entities.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-null-char.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-addslashes-single-quote.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/dom-write-innerHTML.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-with-source-entities.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/dom-write-location-inline-event.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/malformed-HTML.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/javascript-link-ampersand.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/link-onclick.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/anchor-url-dom-write-location-inline-event.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/base-href-safe2.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/anchor-url-dom-write-location-inline-event-null-char.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/dom-write-URL.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-redirect.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/object-tag.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-addslashes-backslash.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/dom-write-location-javascript-URL.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/embed-tag.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/faux-script2.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/anchor-url-dom-write-location-javascript-URL.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-with-source-relative-scheme.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/img-onerror-tricky.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/javascript-link-HTML-entities-named.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/javascript-link-HTML-entities-null-char.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-addslashes-null-char.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/link-opens-new-window.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-utf-7-encoded.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-utf-7.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-with-source.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-addslashes-double-quote.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-safe.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/link-onclick-null-char.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/javascript-link.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-control-char.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-with-source-null-char.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/iframe-javascript-url.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-src-redirect-safe.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-with-source-control-char.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/get-from-iframe.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/inline-event-HTML-entities.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/post-from-iframe.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-post-control-char.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/object-embed-tag.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/base-href.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/script-tag-entities.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/base-href-safe.html +/sdcard/android/layout_tests/http/tests/security/xssAuditor/embed-tag-null-char.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-location-get-override.html +/sdcard/android/layout_tests/http/tests/security/protocol-compare-case-insensitive.html +/sdcard/android/layout_tests/http/tests/security/xss-DENIED-xsl-external-entity.xml +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-history-get-override.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-get-override.html +/sdcard/android/layout_tests/http/tests/security/cross-origin-xsl-BLOCKED.html +/sdcard/android/layout_tests/http/tests/security/local-iFrame-from-remote.html +/sdcard/android/layout_tests/http/tests/security/credentials-in-referer.html +/sdcard/android/layout_tests/http/tests/security/xss-DENIED-xsl-external-entity-redirect.xml +/sdcard/android/layout_tests/http/tests/security/local-video-poster-from-remote.html +/sdcard/android/layout_tests/http/tests/security/local-CSS-from-remote.html +/sdcard/android/layout_tests/http/tests/security/local-user-CSS-from-remote.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-object-prototype.html +/sdcard/android/layout_tests/http/tests/security/dataTransfer-set-data-file-url.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-enumeration.html +/sdcard/android/layout_tests/http/tests/security/host-compare-case-insensitive.html +/sdcard/android/layout_tests/http/tests/security/xss-DENIED-xsl-document.xml +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-protocol.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-private-browsing.html +/sdcard/android/layout_tests/http/tests/security/feed-urls-from-remote.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-put.html +/sdcard/android/layout_tests/http/tests/security/canvas-remote-read-svg-image.html +/sdcard/android/layout_tests/http/tests/security/window-properties-clear-domain.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-callback-explicit-domain-DENY.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-get.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-port.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-document-direct.html +/sdcard/android/layout_tests/http/tests/security/window-properties-pass.html +/sdcard/android/layout_tests/http/tests/security/local-video-src-from-remote.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-history-put.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-child-explicit-domain.html +/sdcard/android/layout_tests/http/tests/security/local-video-source-from-remote.html +/sdcard/android/layout_tests/http/tests/security/drag-over-remote-content-iframe.html +/sdcard/android/layout_tests/http/tests/security/local-JavaScript-from-remote.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-parent-explicit-domain.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-location-put.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-history-get.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-get-custom-property-cached.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-location-get.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-delete.html +/sdcard/android/layout_tests/http/tests/security/xss-DENIED-xsl-document-redirect.xml +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-protocol-explicit-domain.html +/sdcard/android/layout_tests/http/tests/security/window-properties-clear-port.html +/sdcard/android/layout_tests/http/tests/security/frame-loading-via-document-write.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-port-explicit-domain.html +/sdcard/android/layout_tests/http/tests/security/local-image-from-remote.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/workers/methods-async.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/workers/methods.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/web-apps/008.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/methods-async.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/methods.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/uri-resolution-opera-open-005.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/upload-onload-event.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/small-chunks-response-text.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/access-control-basic-non-simple-allow-async.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/uri-resolution-opera-open-009.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/frame-unload-abort-crash.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/access-control-basic-non-simple-deny-cached.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-unsafe-redirect.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/uri-resolution-opera-open-006.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/upload-onprogress-event.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/access-control-basic-allow.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/cache-override.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xhr-onunload.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/methods-lower-case.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/uri-resolution-opera-open-007.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/svg-created-by-xhr-disallowed-in-dashboard.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/uri-resolution-opera-open-004.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-missing-file-exception.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/cookies.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/uri-resolution-opera-open-010.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/redirect-cross-origin-tripmine.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/origin-header-same-origin-get-sync.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/response-encoding.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/frame-load-cancelled-abort.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/upload-progress-events.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xml-encoding.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/default-content-type-dashboard.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/abort-should-cancel-load.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/access-control-basic-whitelist-request-headers.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/uri-resolution-opera-open-008.html +/sdcard/android/layout_tests/http/tests/loading/preload-img-test.html +/sdcard/android/layout_tests/http/tests/loading/gmail-assert-on-load.html +/sdcard/android/layout_tests/http/tests/loading/text-content-type-with-binary-extension.html +/sdcard/android/layout_tests/http/tests/loading/basic.html +/sdcard/android/layout_tests/http/tests/loading/slow-parsing-subframe.html +/sdcard/android/layout_tests/http/tests/loading/deleted-host-in-resource-load-delegate-callback.html +/sdcard/android/layout_tests/http/tests/loading/bad-scheme-subframe.html +/sdcard/android/layout_tests/http/tests/loading/location-hash-reload-cycle.html +/sdcard/android/layout_tests/http/tests/loading/bad-server-subframe.html +/sdcard/android/layout_tests/http/tests/loading/empty-subframe.html +/sdcard/android/layout_tests/http/tests/loading/redirect-methods.html /sdcard/android/layout_tests/media/video-error-does-not-exist.html /sdcard/android/layout_tests/media/audio-constructor.html +/sdcard/android/layout_tests/media/video-play-empty-events.html /sdcard/android/layout_tests/media/video-append-source.html /sdcard/android/layout_tests/media/media-load-event.html /sdcard/android/layout_tests/media/unsupported-rtsp.html +/sdcard/android/layout_tests/media/video-dom-autoplay.html /sdcard/android/layout_tests/media/video-currentTime-set2.html /sdcard/android/layout_tests/media/video-muted.html /sdcard/android/layout_tests/media/progress-event.html @@ -558,25 +910,33 @@ /sdcard/android/layout_tests/media/video-controls-zoomed.html /sdcard/android/layout_tests/media/video-src-invalid-remove.html /sdcard/android/layout_tests/media/video-volume.html +/sdcard/android/layout_tests/media/video-size.html /sdcard/android/layout_tests/media/controls-right-click-on-timebar.html /sdcard/android/layout_tests/media/video-currentTime.html /sdcard/android/layout_tests/media/audio-constructor-autobuffer.html /sdcard/android/layout_tests/media/broken-video.html /sdcard/android/layout_tests/media/video-buffered.html +/sdcard/android/layout_tests/media/video-load-readyState.html /sdcard/android/layout_tests/media/video-load-networkState.html /sdcard/android/layout_tests/media/unsupported-tracks.html /sdcard/android/layout_tests/media/video-source-add-src.html /sdcard/android/layout_tests/media/video-seek-past-end-paused.html +/sdcard/android/layout_tests/media/media-startTime.html /sdcard/android/layout_tests/media/video-source-error.html +/sdcard/android/layout_tests/media/video-autoplay.html /sdcard/android/layout_tests/media/video-controls.html /sdcard/android/layout_tests/media/video-canvas-source.html +/sdcard/android/layout_tests/media/video-timeupdate-during-playback.html /sdcard/android/layout_tests/media/video-currentTime-set.html +/sdcard/android/layout_tests/media/controls-css-overload.html /sdcard/android/layout_tests/media/video-source-type-params.html /sdcard/android/layout_tests/media/event-attributes.html /sdcard/android/layout_tests/media/audio-data-url.html /sdcard/android/layout_tests/media/video-src-plus-source.html /sdcard/android/layout_tests/media/video-no-autoplay.html +/sdcard/android/layout_tests/media/video-pause-empty-events.html /sdcard/android/layout_tests/media/video-document-types.html +/sdcard/android/layout_tests/media/video-src-remove.html /sdcard/android/layout_tests/media/audio-delete-while-slider-thumb-clicked.html /sdcard/android/layout_tests/media/video-error-abort.html /sdcard/android/layout_tests/media/video-size-intrinsic-scale.html @@ -625,8 +985,6 @@ /sdcard/android/layout_tests/transitions/transition-hit-test.html /sdcard/android/layout_tests/transitions/opacity-transition-zindex.html /sdcard/android/layout_tests/transitions/interrupted-all-transition.html -/sdcard/android/layout_tests/transitions/mask-transitions.html -/sdcard/android/layout_tests/transitions/zero-duration-with-non-zero-delay-start.html /sdcard/android/layout_tests/transitions/hang-with-bad-transition-list.html /sdcard/android/layout_tests/transitions/zero-duration-with-non-zero-delay-end.html /sdcard/android/layout_tests/transitions/remove-transition-style.html diff --git a/tests/DumpRenderTree/assets/results/layout_tests_nontext.txt b/tests/DumpRenderTree/assets/results/layout_tests_nontext.txt index 121b5a142a5f..665ef078233f 100644 --- a/tests/DumpRenderTree/assets/results/layout_tests_nontext.txt +++ b/tests/DumpRenderTree/assets/results/layout_tests_nontext.txt @@ -3233,6 +3233,34 @@ /sdcard/android/layout_tests/fonts/fantasy.html /sdcard/android/layout_tests/fonts/serif.html /sdcard/android/layout_tests/fonts/sans-serif.html +/sdcard/android/layout_tests/http/tests/webarchive/test-css-url-encoding-shift-jis.html +/sdcard/android/layout_tests/http/tests/webarchive/test-css-url-encoding.html +/sdcard/android/layout_tests/http/tests/webarchive/test-css-url-encoding-utf-8.html +/sdcard/android/layout_tests/http/tests/webarchive/test-preload-resources.html +/sdcard/android/layout_tests/http/tests/multipart/invalid-image-data.html +/sdcard/android/layout_tests/http/tests/multipart/invalid-image-data-standalone.html +/sdcard/android/layout_tests/http/tests/local/file-url-sent-as-referer.html +/sdcard/android/layout_tests/http/tests/misc/location-replace-crossdomain.html +/sdcard/android/layout_tests/http/tests/misc/acid2.html +/sdcard/android/layout_tests/http/tests/misc/acid2-pixel.html +/sdcard/android/layout_tests/http/tests/misc/favicon-as-image.html +/sdcard/android/layout_tests/http/tests/misc/generated-content-inside-table.html +/sdcard/android/layout_tests/http/tests/misc/willCacheResponse-delegate-callback.html +/sdcard/android/layout_tests/http/tests/misc/iframe404.html +/sdcard/android/layout_tests/http/tests/misc/frame-access-during-load.html +/sdcard/android/layout_tests/http/tests/navigation/postredirect-goback1.html +/sdcard/android/layout_tests/http/tests/navigation/error404-subframeload.html +/sdcard/android/layout_tests/http/tests/navigation/error404-basic.html +/sdcard/android/layout_tests/http/tests/navigation/anchor-frames.html +/sdcard/android/layout_tests/http/tests/navigation/postredirect-basic.html +/sdcard/android/layout_tests/http/tests/navigation/post-goback1.html +/sdcard/android/layout_tests/http/tests/navigation/post-basic.html +/sdcard/android/layout_tests/http/tests/navigation/post-frames.html +/sdcard/android/layout_tests/http/tests/navigation/error404-goback.html +/sdcard/android/layout_tests/http/tests/navigation/javascriptlink-frames.html +/sdcard/android/layout_tests/http/tests/navigation/postredirect-frames.html +/sdcard/android/layout_tests/http/tests/navigation/error404-frames.html +/sdcard/android/layout_tests/http/tests/loading/simple-subframe.html /sdcard/android/layout_tests/media/video-display-toggle.html /sdcard/android/layout_tests/media/video-transformed.html /sdcard/android/layout_tests/media/video-empty-source.html diff --git a/tests/DumpRenderTree/assets/results/layout_tests_passed.txt b/tests/DumpRenderTree/assets/results/layout_tests_passed.txt index b40a21e2b3f1..942b6479f948 100644 --- a/tests/DumpRenderTree/assets/results/layout_tests_passed.txt +++ b/tests/DumpRenderTree/assets/results/layout_tests_passed.txt @@ -1,15 +1,20 @@ /sdcard/android/layout_tests/accessibility/non-native-image-crash.html /sdcard/android/layout_tests/animations/animation-css-rule-types.html /sdcard/android/layout_tests/animations/animation-events-create.html +/sdcard/android/layout_tests/animations/play-state.html +/sdcard/android/layout_tests/animations/animation-start-event-destroy-renderer.html /sdcard/android/layout_tests/animations/combo-transform-translate+scale.html /sdcard/android/layout_tests/animations/transform-origin-vs-functions.html /sdcard/android/layout_tests/animations/simultaneous-start-transform.html /sdcard/android/layout_tests/animations/lineheight-animation.html +/sdcard/android/layout_tests/animations/import.html /sdcard/android/layout_tests/animations/simultaneous-start-left.html /sdcard/android/layout_tests/animations/fill-unset-properties.html /sdcard/android/layout_tests/animations/multiple-keyframes.html /sdcard/android/layout_tests/animations/change-one-anim.html +/sdcard/android/layout_tests/animations/keyframes-comma-separated.html /sdcard/android/layout_tests/animations/matrix-anim.html +/sdcard/android/layout_tests/animations/keyframes-rule.html /sdcard/android/layout_tests/animations/generic-from-to.html /sdcard/android/layout_tests/animations/big-rotation.html /sdcard/android/layout_tests/animations/keyframe-timing-functions.html @@ -18,11 +23,13 @@ /sdcard/android/layout_tests/animations/animation-iteration-event-destroy-renderer.html /sdcard/android/layout_tests/animations/keyframes.html /sdcard/android/layout_tests/animations/multiple-animations.html +/sdcard/android/layout_tests/animations/animation-end-event-destroy-renderer.html /sdcard/android/layout_tests/animations/transition-and-animation-2.html /sdcard/android/layout_tests/animations/import-crash.html /sdcard/android/layout_tests/animations/empty-keyframes.html /sdcard/android/layout_tests/animations/width-using-ems.html /sdcard/android/layout_tests/animations/combo-transform-rotate+scale.html +/sdcard/android/layout_tests/animations/keyframes-out-of-order.html /sdcard/android/layout_tests/css1/units/zero-duration-without-units.html /sdcard/android/layout_tests/css2.1/atrule_longest_match.html /sdcard/android/layout_tests/css3/khtml-background-size-0x0-bmp.html @@ -1231,6 +1238,23 @@ /sdcard/android/layout_tests/fast/cookies/local-file-can-set-cookies.html /sdcard/android/layout_tests/fast/css-generated-content/empty-content-with-float-crash.html /sdcard/android/layout_tests/fast/css-generated-content/reset-content-to-initial.html +/sdcard/android/layout_tests/fast/workers/worker-close.html +/sdcard/android/layout_tests/fast/workers/worker-context-gc.html +/sdcard/android/layout_tests/fast/workers/worker-constructor.html +/sdcard/android/layout_tests/fast/workers/worker-timeout.html +/sdcard/android/layout_tests/fast/workers/worker-messageport.html +/sdcard/android/layout_tests/fast/workers/worker-gc.html +/sdcard/android/layout_tests/fast/workers/worker-replace-self.html +/sdcard/android/layout_tests/fast/workers/worker-event-listener.html +/sdcard/android/layout_tests/fast/workers/worker-cloneport.html +/sdcard/android/layout_tests/fast/workers/worker-call.html +/sdcard/android/layout_tests/fast/workers/worker-messageport-gc.html +/sdcard/android/layout_tests/fast/workers/stress-js-execution.html +/sdcard/android/layout_tests/fast/workers/worker-terminate.html +/sdcard/android/layout_tests/fast/workers/use-machine-stack.html +/sdcard/android/layout_tests/fast/workers/worker-navigator.html +/sdcard/android/layout_tests/fast/workers/worker-script-error.html +/sdcard/android/layout_tests/fast/workers/worker-replace-global-constructor.html /sdcard/android/layout_tests/fast/transforms/container-transform-crash.html /sdcard/android/layout_tests/fast/leaks/001.html /sdcard/android/layout_tests/fast/leaks/002.html @@ -1291,7 +1315,6 @@ /sdcard/android/layout_tests/fast/events/onerror-bubbling.html /sdcard/android/layout_tests/fast/events/keydown-remove-frame.html /sdcard/android/layout_tests/fast/events/message-channel-gc-3.html -/sdcard/android/layout_tests/fast/events/scroll-to-anchor-in-overflow-hidden.html /sdcard/android/layout_tests/fast/events/event-targets.html /sdcard/android/layout_tests/fast/events/space-scroll-event.html /sdcard/android/layout_tests/fast/events/onload-after-document-close-no-subresource.html @@ -1943,14 +1966,12 @@ /sdcard/android/layout_tests/fast/dom/image-object.html /sdcard/android/layout_tests/fast/dom/gc-5.html /sdcard/android/layout_tests/fast/dom/cssTarget-crash.html -/sdcard/android/layout_tests/fast/dom/noscript-canvas-in-created-html-document.html /sdcard/android/layout_tests/fast/dom/DOMParser-assign-variable.html /sdcard/android/layout_tests/fast/dom/offset-parent-positioned-and-inline.html /sdcard/android/layout_tests/fast/dom/timer-clear-interval-in-handler.html /sdcard/android/layout_tests/fast/dom/implementation-createHTMLDocument.html /sdcard/android/layout_tests/fast/dom/iframe-document.html /sdcard/android/layout_tests/fast/dom/document-all-input.html -/sdcard/android/layout_tests/fast/dom/null-document-location-href-put-crash.html /sdcard/android/layout_tests/fast/dom/getelementsbytagnamens-mixed-namespaces.html /sdcard/android/layout_tests/fast/dom/object-plugin-hides-properties.html /sdcard/android/layout_tests/fast/dom/gc-2.html @@ -2344,6 +2365,13 @@ /sdcard/android/layout_tests/fast/css/webkit-marquee-speed-unit-in-quirksmode.html /sdcard/android/layout_tests/fast/css/CSSPrimitiveValue-exceptions.html /sdcard/android/layout_tests/fast/css/empty-script.html +/sdcard/android/layout_tests/fast/css/mask-missing-image-crash.html +/sdcard/android/layout_tests/fast/css/parse-timing-function-crash.html +/sdcard/android/layout_tests/fast/css/background-position-inherit.html +/sdcard/android/layout_tests/fast/css/readonly-pseudoclass-opera-003.html +/sdcard/android/layout_tests/fast/css/font-family-builtins.html +/sdcard/android/layout_tests/fast/css/remove-shorthand.html +/sdcard/android/layout_tests/fast/css/overflow-property.html /sdcard/android/layout_tests/fast/css/pseudo-required-optional-005.html /sdcard/android/layout_tests/fast/css/min-device-aspect-ratio.html /sdcard/android/layout_tests/fast/css/nested-rule-parent-sheet.html @@ -2417,7 +2445,6 @@ /sdcard/android/layout_tests/fast/history/subframe-is-visited.html /sdcard/android/layout_tests/fast/loader/early-load-cancel.html /sdcard/android/layout_tests/fast/loader/iframe-recursive-synchronous-load.html -/sdcard/android/layout_tests/fast/loader/location-port.html /sdcard/android/layout_tests/fast/loader/local-css-allowed-in-strict-mode.html /sdcard/android/layout_tests/fast/loader/url-strip-cr-lf-tab.html /sdcard/android/layout_tests/fast/loader/hashchange-event.html @@ -2513,33 +2540,301 @@ /sdcard/android/layout_tests/fast/reflections/teardown-crash.html /sdcard/android/layout_tests/fast/reflections/reflection-computed-style.html /sdcard/android/layout_tests/fast/reflections/reflection-overflow-scroll.html -/sdcard/android/layout_tests/media/video-play-empty-events.html +/sdcard/android/layout_tests/http/tests/multipart/win-boundary-crash.html +/sdcard/android/layout_tests/http/tests/multipart/stop-crash.html +/sdcard/android/layout_tests/http/tests/mime/standard-mode-loads-stylesheet-with-text-css-and-invalid-type.html +/sdcard/android/layout_tests/http/tests/mime/standard-mode-loads-stylesheet-with-empty-content-type.html +/sdcard/android/layout_tests/http/tests/mime/standard-mode-loads-stylesheet-with-charset-and-css-extension.html +/sdcard/android/layout_tests/http/tests/mime/standard-mode-loads-stylesheet-with-charset.html +/sdcard/android/layout_tests/http/tests/local/style-access-before-stylesheet-loaded.html +/sdcard/android/layout_tests/http/tests/local/stylesheet-and-script-load-order-http.html +/sdcard/android/layout_tests/http/tests/local/link-stylesheet-preferred.html +/sdcard/android/layout_tests/http/tests/local/stylesheet-and-script-load-order.html +/sdcard/android/layout_tests/http/tests/misc/uncacheable-script-repeated.html +/sdcard/android/layout_tests/http/tests/misc/embedCrasher.html +/sdcard/android/layout_tests/http/tests/misc/multiple-submit.html +/sdcard/android/layout_tests/http/tests/misc/empty-file-formdata.html +/sdcard/android/layout_tests/http/tests/misc/submit-post-in-utf7.html +/sdcard/android/layout_tests/http/tests/misc/text-refresh.html +/sdcard/android/layout_tests/http/tests/misc/window-open-then-write.html +/sdcard/android/layout_tests/http/tests/misc/submit-post-in-utf16be.html +/sdcard/android/layout_tests/http/tests/misc/frame-default-enc-same-domain.html +/sdcard/android/layout_tests/http/tests/misc/submit-post-in-utf32le.html +/sdcard/android/layout_tests/http/tests/misc/iframe-domain-test.html +/sdcard/android/layout_tests/http/tests/misc/frame-default-enc-different-domain.html +/sdcard/android/layout_tests/http/tests/misc/css-accept-any-type.html +/sdcard/android/layout_tests/http/tests/misc/url-in-utf7.html +/sdcard/android/layout_tests/http/tests/misc/submit-get-in-utf32be.html +/sdcard/android/layout_tests/http/tests/misc/meta-refresh-stray-single-quote.html +/sdcard/android/layout_tests/http/tests/misc/canvas-pattern-from-incremental-image.html +/sdcard/android/layout_tests/http/tests/misc/submit-get-in-utf16le.html +/sdcard/android/layout_tests/http/tests/misc/url-in-utf32be.html +/sdcard/android/layout_tests/http/tests/misc/timer-vs-loading.html +/sdcard/android/layout_tests/http/tests/misc/font-face-in-multiple-segmented-faces.html +/sdcard/android/layout_tests/http/tests/misc/url-in-utf16le.html +/sdcard/android/layout_tests/http/tests/misc/refresh-meta-with-newline.html +/sdcard/android/layout_tests/http/tests/misc/post-submit-button.html +/sdcard/android/layout_tests/http/tests/misc/redirect-to-about-blank.html +/sdcard/android/layout_tests/http/tests/misc/javascript-url-stop-loaders.html +/sdcard/android/layout_tests/http/tests/misc/iframe-invalid-source-crash.html +/sdcard/android/layout_tests/http/tests/misc/slow-preload-cancel.html +/sdcard/android/layout_tests/http/tests/misc/object-image-error-with-onload.html +/sdcard/android/layout_tests/http/tests/misc/image-error.html +/sdcard/android/layout_tests/http/tests/misc/referrer.html +/sdcard/android/layout_tests/http/tests/misc/cached-scripts.html +/sdcard/android/layout_tests/http/tests/misc/empty-cookie.html +/sdcard/android/layout_tests/http/tests/misc/submit-post-in-utf32be.html +/sdcard/android/layout_tests/http/tests/misc/missing-style-sheet.html +/sdcard/android/layout_tests/http/tests/misc/submit-post-in-utf16le.html +/sdcard/android/layout_tests/http/tests/misc/submit-get-in-utf16be.html +/sdcard/android/layout_tests/http/tests/misc/DOMContentLoaded-event.html +/sdcard/android/layout_tests/http/tests/misc/onload-remove-iframe-crash-2.html +/sdcard/android/layout_tests/http/tests/misc/submit-get-in-utf32le.html +/sdcard/android/layout_tests/http/tests/misc/object-image-error.html +/sdcard/android/layout_tests/http/tests/misc/createElementNamespace3.html +/sdcard/android/layout_tests/http/tests/misc/url-in-utf16be.html +/sdcard/android/layout_tests/http/tests/misc/url-in-utf32le.html +/sdcard/android/layout_tests/http/tests/misc/crash-multiple-family-fontface.html +/sdcard/android/layout_tests/http/tests/misc/BOM-override-script.html +/sdcard/android/layout_tests/http/tests/misc/createElementNamespace1.xml +/sdcard/android/layout_tests/http/tests/workers/text-encoding.html +/sdcard/android/layout_tests/http/tests/workers/worker-redirect.html +/sdcard/android/layout_tests/http/tests/workers/worker-importScripts.html +/sdcard/android/layout_tests/http/tests/cookies/double-quoted-value-with-semi-colon.html +/sdcard/android/layout_tests/http/tests/uri/resolve-encoding-relative.html +/sdcard/android/layout_tests/http/tests/uri/escaped-entity.html +/sdcard/android/layout_tests/http/tests/uri/utf8-path.html +/sdcard/android/layout_tests/http/tests/navigation/changing-frame-hierarchy-in-onload.html +/sdcard/android/layout_tests/http/tests/navigation/fallback-anchor-reload.html +/sdcard/android/layout_tests/http/tests/navigation/back-send-referrer.html +/sdcard/android/layout_tests/http/tests/incremental/slow-utf8-css.html +/sdcard/android/layout_tests/http/tests/incremental/frame-focus-before-load.html +/sdcard/android/layout_tests/http/tests/appcache/crash-when-navigating-away-then-back.html +/sdcard/android/layout_tests/http/tests/appcache/offline-access.html +/sdcard/android/layout_tests/http/tests/appcache/update-cache.html +/sdcard/android/layout_tests/http/tests/appcache/manifest-with-empty-file.html +/sdcard/android/layout_tests/http/tests/appcache/simple.html +/sdcard/android/layout_tests/http/tests/appcache/wrong-signature-2.html +/sdcard/android/layout_tests/http/tests/appcache/top-frame-3.html +/sdcard/android/layout_tests/http/tests/appcache/online-whitelist.html +/sdcard/android/layout_tests/http/tests/appcache/fallback.html +/sdcard/android/layout_tests/http/tests/appcache/different-origin-manifest.html +/sdcard/android/layout_tests/http/tests/appcache/empty-manifest.html +/sdcard/android/layout_tests/http/tests/appcache/manifest-redirect.html +/sdcard/android/layout_tests/http/tests/appcache/navigating-away-while-cache-attempt-in-progress.html +/sdcard/android/layout_tests/http/tests/appcache/top-frame-4.html +/sdcard/android/layout_tests/http/tests/appcache/wrong-signature.html +/sdcard/android/layout_tests/http/tests/appcache/fail-on-update.html +/sdcard/android/layout_tests/http/tests/appcache/foreign-iframe-main.html +/sdcard/android/layout_tests/http/tests/appcache/xhr-foreign-resource.html +/sdcard/android/layout_tests/http/tests/appcache/manifest-containing-itself.html +/sdcard/android/layout_tests/http/tests/appcache/resource-redirect.html +/sdcard/android/layout_tests/http/tests/appcache/idempotent-update.html +/sdcard/android/layout_tests/http/tests/appcache/top-frame-1.html +/sdcard/android/layout_tests/http/tests/appcache/main-resource-hash.html +/sdcard/android/layout_tests/http/tests/appcache/manifest-parsing.html +/sdcard/android/layout_tests/http/tests/appcache/404-manifest.html +/sdcard/android/layout_tests/http/tests/appcache/wrong-content-type.html +/sdcard/android/layout_tests/http/tests/appcache/resource-redirect-2.html +/sdcard/android/layout_tests/http/tests/appcache/top-frame-2.html +/sdcard/android/layout_tests/http/tests/appcache/404-resource.html +/sdcard/android/layout_tests/http/tests/appcache/remove-cache.html +/sdcard/android/layout_tests/http/tests/appcache/manifest-redirect-2.html +/sdcard/android/layout_tests/http/tests/appcache/reload.html +/sdcard/android/layout_tests/http/tests/appcache/cyrillic-uri.html +/sdcard/android/layout_tests/http/tests/security/aboutBlank/security-context-alias.html +/sdcard/android/layout_tests/http/tests/security/aboutBlank/security-context-write.html +/sdcard/android/layout_tests/http/tests/security/aboutBlank/security-context-grandchildren-alias.html +/sdcard/android/layout_tests/http/tests/security/aboutBlank/security-context-with-base-tag.html +/sdcard/android/layout_tests/http/tests/security/aboutBlank/security-context.html +/sdcard/android/layout_tests/http/tests/security/aboutBlank/window-open-self-about-blank.html +/sdcard/android/layout_tests/http/tests/security/aboutBlank/security-context-grandchildren.html +/sdcard/android/layout_tests/http/tests/security/aboutBlank/security-context-grandchildren-writeln-lexical.html +/sdcard/android/layout_tests/http/tests/security/aboutBlank/security-context-window-open.html +/sdcard/android/layout_tests/http/tests/security/aboutBlank/security-context-grandchildren-write-lexical.html +/sdcard/android/layout_tests/http/tests/security/aboutBlank/security-context-grandchildren-lexical.html +/sdcard/android/layout_tests/http/tests/security/aboutBlank/security-context-writeln.html +/sdcard/android/layout_tests/http/tests/security/cookies/document-open.html +/sdcard/android/layout_tests/http/tests/security/cookies/create-document.html +/sdcard/android/layout_tests/http/tests/security/cookies/assign-document-url.html +/sdcard/android/layout_tests/http/tests/security/cookies/basic.html +/sdcard/android/layout_tests/http/tests/security/cookies/base-tag.html +/sdcard/android/layout_tests/http/tests/security/cookies/base-about-blank.html +/sdcard/android/layout_tests/http/tests/security/cookies/xmlhttprequest.html +/sdcard/android/layout_tests/http/tests/security/listener/xss-JSTargetNode-onclick-shortcut.html +/sdcard/android/layout_tests/http/tests/security/listener/xss-XMLHttpRequest-shortcut.html +/sdcard/android/layout_tests/http/tests/security/listener/xss-JSTargetNode-onclick-addEventListener.html +/sdcard/android/layout_tests/http/tests/security/listener/xss-XMLHttpRequest-addEventListener.html +/sdcard/android/layout_tests/http/tests/security/MessagePort/event-listener-context.html +/sdcard/android/layout_tests/http/tests/security/postMessage/delivery-order.html +/sdcard/android/layout_tests/http/tests/security/postMessage/data-url-sends-null-origin.html +/sdcard/android/layout_tests/http/tests/security/postMessage/origin-unaffected-by-base-tag.html +/sdcard/android/layout_tests/http/tests/security/postMessage/origin-unaffected-by-document-domain.html +/sdcard/android/layout_tests/http/tests/security/postMessage/javascript-page-still-sends-origin.html +/sdcard/android/layout_tests/http/tests/security/postMessage/invalid-origin-throws-exception.html +/sdcard/android/layout_tests/http/tests/security/postMessage/target-origin.html +/sdcard/android/layout_tests/http/tests/security/frameNavigation/context-for-window-open.html +/sdcard/android/layout_tests/http/tests/security/frameNavigation/context-for-location.html +/sdcard/android/layout_tests/http/tests/security/frameNavigation/not-opener.html +/sdcard/android/layout_tests/http/tests/security/frameNavigation/opener.html +/sdcard/android/layout_tests/http/tests/security/frameNavigation/context-for-location-assign.html +/sdcard/android/layout_tests/http/tests/security/frameNavigation/context-for-location-href.html +/sdcard/android/layout_tests/http/tests/security/frameNavigation/xss-ALLOWED-parent-navigation-change.html +/sdcard/android/layout_tests/http/tests/security/originHeader/origin-header-for-get.html +/sdcard/android/layout_tests/http/tests/security/originHeader/origin-header-for-https.html +/sdcard/android/layout_tests/http/tests/security/originHeader/origin-header-for-post.html +/sdcard/android/layout_tests/http/tests/security/originHeader/origin-header-for-data.html +/sdcard/android/layout_tests/http/tests/security/xss-DENIED-assign-location-hash.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-history-prototype.html +/sdcard/android/layout_tests/http/tests/security/xss-DENIED-synchronous-form.html +/sdcard/android/layout_tests/http/tests/security/canvas-remote-read-redirect-to-remote-image.html +/sdcard/android/layout_tests/http/tests/security/xss-DENIED-assign-location-nonstandardProperty.html +/sdcard/android/layout_tests/http/tests/security/xss-DENIED-assign-location-pathname.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-frames.html +/sdcard/android/layout_tests/http/tests/security/object-literals.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-location-prototype.html +/sdcard/android/layout_tests/http/tests/security/xss-DENIED-assign-location-search.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-selection.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-name-getter.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-call.html +/sdcard/android/layout_tests/http/tests/security/xss-DENIED-assign-location-reload.html +/sdcard/android/layout_tests/http/tests/security/xss-DENIED-invalid-domain-change.html +/sdcard/android/layout_tests/http/tests/security/canvas-remote-read-remote-image.html +/sdcard/android/layout_tests/http/tests/security/xss-DENIED-assign-location-protocol.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-first-time.html +/sdcard/android/layout_tests/http/tests/security/xss-eval.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-DOMImplementation.html +/sdcard/android/layout_tests/http/tests/security/xss-DENIED-assign-location-hostname.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-custom.html +/sdcard/android/layout_tests/http/tests/security/xss-DENIED-assign-location-host.html +/sdcard/android/layout_tests/http/tests/security/cross-frame-access-callback-explicit-domain-ALLOW.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/workers/xmlhttprequest-file-not-found.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/workers/abort-exception-assert.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/workers/close.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/web-apps/010.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/web-apps/002.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/web-apps/012.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/web-apps/004.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/web-apps/014.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/web-apps/018.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/web-apps/002-simple.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/web-apps/001.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/web-apps/011.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/web-apps/003.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/web-apps/013.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/web-apps/005.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/web-apps/015.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/web-apps/007.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/cross-site-denied-response.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/encode-request-url.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/access-control-basic-allow-async.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/access-control-basic-non-simple-allow.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/access-control-basic-allow-preflight-cache.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/inject-header.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-LSProgressEvent-ProgressEvent-should-match.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/origin-header-same-origin-post-async.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/access-control-basic-denied.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/origin-header-cross-origin-post-sync.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-InvalidStateException-getAllRequestHeaders.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/simple-cross-origin-denied-events-post-sync.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/binary-x-user-defined.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/onloadstart-event.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-no-content-length-onProgress.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/readystatechange.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-contenttype-empty.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/access-control-basic-post-fail-non-simple-content-type.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-forbidden-methods-exception.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/access-control-basic-allow-preflight-cache-invalidation-by-method.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/serialize-document.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/onerror-event.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/close-window.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/redirect-cross-origin-post-sync.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/detaching-frame-2.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/encode-request-url-2.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/set-dangerous-headers.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/event-target.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-addEventListener-onProgress.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/send-on-abort.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/document-domain-set.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/access-control-basic-allow-preflight-cache-timeout.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-responseXML-exception.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/cross-site-denied-response-sync.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/upload-onloadstart-event.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/supported-xml-content-types.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/simple-cross-origin-denied-events.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/request-encoding.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/zero-length-response.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/connection-error-sync.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/access-control-basic-allow-access-control-origin-header-data-url.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/access-control-basic-allow-preflight-cache-invalidation-by-header.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/redirect-cross-origin.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/access-control-basic-allow-star.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-crlf-getAllResponseHeader.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/event-listener-gc.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/interactive-state.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/state-after-network-error.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/abort-crash.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/get-dangerous-headers.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-image-not-loaded.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/exceptions.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-test-send-flag.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/origin-header-cross-origin-post-async.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/referer.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-invalidHeader-getRequestHeader.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/infoOnProgressEvent.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/access-control-basic-allow-access-control-origin-header.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/docLoaderFrame.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/simple-cross-origin-denied-events-sync.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/post-content-type.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/access-control-basic-whitelist-response-headers.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/onabort-event.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/origin-header-same-origin-get-async.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/detaching-frame.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/redirect-cross-origin-sync.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/access-control-basic-get-fail-non-simple.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/zero-length-response-sync.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/access-control-basic-denied-preflight-cache.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/authorization-header.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-post-crash.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/origin-header-cross-origin-get-sync.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/origin-header-cross-origin-get-async.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/redirect-cross-origin-sync-double.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-abort-readyState-shouldDispatchEvent.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-responseText-exception.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/redirect-cross-origin-2.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-abort-readyState-shouldNotDispatchEvent.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/status-after-abort.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/XMLHttpRequestException.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-onProgress-open-should-zero-length.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/broken-xml-encoding.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/simple-cross-origin-denied-events-post.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/extra-parameters.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-multiple-open.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/xmlhttprequest-InvalidStateException-getRequestHeader.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/origin-header-same-origin-post-sync.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/cross-site-denied-response-sync-2.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/request-from-popup.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/redirect-cross-origin-post.html +/sdcard/android/layout_tests/http/tests/xmlhttprequest/simple-cross-origin-progress-events.html +/sdcard/android/layout_tests/http/tests/messaging/cross-domain-message-event-dispatch.html +/sdcard/android/layout_tests/http/tests/messaging/cross-domain-message-send.html /sdcard/android/layout_tests/media/constructors.html -/sdcard/android/layout_tests/media/video-dom-autoplay.html /sdcard/android/layout_tests/media/video-poster.html /sdcard/android/layout_tests/media/video-source-media.html /sdcard/android/layout_tests/media/video-controls-with-mutation-event-handler.html /sdcard/android/layout_tests/media/video-src-set.html /sdcard/android/layout_tests/media/video-display-none-crash.html -/sdcard/android/layout_tests/media/video-size.html /sdcard/android/layout_tests/media/video-width-height.html /sdcard/android/layout_tests/media/video-source.html -/sdcard/android/layout_tests/media/video-load-readyState.html /sdcard/android/layout_tests/media/fallback.html /sdcard/android/layout_tests/media/remove-from-document-no-load.html /sdcard/android/layout_tests/media/before-load-member-access.html /sdcard/android/layout_tests/media/video-play-pause-events.html -/sdcard/android/layout_tests/media/media-startTime.html -/sdcard/android/layout_tests/media/video-autoplay.html -/sdcard/android/layout_tests/media/video-timeupdate-during-playback.html /sdcard/android/layout_tests/media/media-constants.html /sdcard/android/layout_tests/media/video-src-source.html -/sdcard/android/layout_tests/media/controls-css-overload.html -/sdcard/android/layout_tests/media/video-pause-empty-events.html /sdcard/android/layout_tests/media/video-play-pause-exception.html /sdcard/android/layout_tests/media/video-dom-autobuffer.html /sdcard/android/layout_tests/media/video-seek-no-src-exception.html -/sdcard/android/layout_tests/media/video-src-remove.html /sdcard/android/layout_tests/media/video-src.html /sdcard/android/layout_tests/plugins/createScriptableObject-before-start.html /sdcard/android/layout_tests/plugins/return-error-from-new-stream-callback-in-full-frame-plugin.html @@ -2601,6 +2896,8 @@ /sdcard/android/layout_tests/transitions/zero-duration-without-units.html /sdcard/android/layout_tests/transitions/min-max-width-height-transitions.html /sdcard/android/layout_tests/transitions/shorthand-transitions.html +/sdcard/android/layout_tests/transitions/mask-transitions.html +/sdcard/android/layout_tests/transitions/zero-duration-with-non-zero-delay-start.html /sdcard/android/layout_tests/transitions/zero-duration-in-list.html /sdcard/android/layout_tests/transitions/shorthand-border-transitions.html /sdcard/android/layout_tests/transitions/inherit-other-props.html diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestsAutoRunner.java b/tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestsAutoRunner.java index e00d3ad290b1..283b98cdf357 100755 --- a/tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestsAutoRunner.java +++ b/tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestsAutoRunner.java @@ -65,14 +65,15 @@ public class LayoutTestsAutoRunner extends InstrumentationTestRunner { } catch (Exception e) { } } - + String r = (String)icicle.get("rebaseline"); this.mRebaseline = (r != null && r.toLowerCase().equals("true")); - super.onCreate(icicle); - + String logtime = (String) icicle.get("logtime"); this.mLogtime = (logtime != null && logtime.toLowerCase().equals("true")); + + super.onCreate(icicle); } public String mTestPath = null; |