diff options
103 files changed, 6975 insertions, 3886 deletions
@@ -100,6 +100,7 @@ LOCAL_SRC_FILES += \ core/java/com/android/internal/app/IUsageStats.aidl \ core/java/com/android/internal/gadget/IGadgetService.aidl \ core/java/com/android/internal/gadget/IGadgetHost.aidl \ + core/java/com/android/internal/os/IResultReceiver.aidl \ core/java/com/android/internal/view/IInputContext.aidl \ core/java/com/android/internal/view/IInputContextCallback.aidl \ core/java/com/android/internal/view/IInputMethod.aidl \ diff --git a/api/current.xml b/api/current.xml index 25295ca..6999a43 100644 --- a/api/current.xml +++ b/api/current.xml @@ -58576,19 +58576,6 @@ visibility="public" > </constructor> -<method name="dismissSoftInput" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="flags" type="int"> -</parameter> -</method> <method name="getCandidatesHiddenVisibility" return="int" abstract="false" @@ -59221,6 +59208,19 @@ visibility="public" > </method> +<method name="requestHideSelf" + return="void" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="flags" type="int"> +</parameter> +</method> <method name="sendDefaultEditorAction" return="boolean" abstract="false" @@ -59426,6 +59426,10 @@ deprecated="not deprecated" visibility="public" > +<parameter name="flags" type="int"> +</parameter> +<parameter name="resultReceiver" type="android.os.ResultReceiver"> +</parameter> </method> <method name="restartInput" return="void" @@ -59454,6 +59458,8 @@ > <parameter name="flags" type="int"> </parameter> +<parameter name="resultReceiver" type="android.os.ResultReceiver"> +</parameter> </method> <method name="startInput" return="void" @@ -59537,6 +59543,21 @@ visibility="public" > </method> +<method name="toggleSoftInput" + return="void" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="showFlags" type="int"> +</parameter> +<parameter name="hideFlags" type="int"> +</parameter> +</method> <method name="updateCursor" return="void" abstract="false" @@ -64817,8 +64838,8 @@ <parameter name="loopCount" type="int"> </parameter> </method> -<method name="setMarkerReachedListener" - return="void" +<method name="setNotificationMarkerPosition" + return="int" abstract="false" native="false" synchronized="false" @@ -64827,10 +64848,10 @@ deprecated="not deprecated" visibility="public" > -<parameter name="listener" type="android.media.AudioTrack.OnMarkerReachedListener"> +<parameter name="markerInFrames" type="int"> </parameter> </method> -<method name="setNotificationMarkerPosition" +<method name="setPlaybackHeadPosition" return="int" abstract="false" native="false" @@ -64840,10 +64861,10 @@ deprecated="not deprecated" visibility="public" > -<parameter name="markerInFrames" type="int"> +<parameter name="positionInFrames" type="int"> </parameter> </method> -<method name="setPeriodicNotificationListener" +<method name="setPlaybackPositionUpdateListener" return="void" abstract="false" native="false" @@ -64853,11 +64874,11 @@ deprecated="not deprecated" visibility="public" > -<parameter name="listener" type="android.media.AudioTrack.OnPeriodicNotificationListener"> +<parameter name="listener" type="android.media.AudioTrack.OnPlaybackPositionUpdateListener"> </parameter> </method> -<method name="setPlaybackHeadPosition" - return="int" +<method name="setPlaybackPositionUpdateListener" + return="void" abstract="false" native="false" synchronized="false" @@ -64866,7 +64887,9 @@ deprecated="not deprecated" visibility="public" > -<parameter name="positionInFrames" type="int"> +<parameter name="listener" type="android.media.AudioTrack.OnPlaybackPositionUpdateListener"> +</parameter> +<parameter name="handler" type="android.os.Handler"> </parameter> </method> <method name="setPlaybackRate" @@ -65103,7 +65126,7 @@ > </field> </class> -<interface name="AudioTrack.OnMarkerReachedListener" +<interface name="AudioTrack.OnPlaybackPositionUpdateListener" abstract="true" static="true" final="false" @@ -65123,14 +65146,6 @@ <parameter name="track" type="android.media.AudioTrack"> </parameter> </method> -</interface> -<interface name="AudioTrack.OnPeriodicNotificationListener" - abstract="true" - static="true" - final="false" - deprecated="not deprecated" - visibility="public" -> <method name="onPeriodicNotification" return="void" abstract="true" @@ -81150,6 +81165,93 @@ > </constructor> </class> +<class name="ResultReceiver" + extends="java.lang.Object" + abstract="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<implements name="android.os.Parcelable"> +</implements> +<constructor name="ResultReceiver" + type="android.os.ResultReceiver" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="handler" type="android.os.Handler"> +</parameter> +</constructor> +<method name="describeContents" + return="int" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +</method> +<method name="onReceiveResult" + return="void" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="protected" +> +<parameter name="resultCode" type="int"> +</parameter> +<parameter name="resultData" type="android.os.Bundle"> +</parameter> +</method> +<method name="send" + return="void" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="resultCode" type="int"> +</parameter> +<parameter name="resultData" type="android.os.Bundle"> +</parameter> +</method> +<method name="writeToParcel" + return="void" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="out" type="android.os.Parcel"> +</parameter> +<parameter name="flags" type="int"> +</parameter> +</method> +<field name="CREATOR" + type="android.os.Parcelable.Creator" + transient="false" + volatile="false" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> +</class> <class name="StatFs" extends="java.lang.Object" abstract="false" @@ -102489,6 +102591,17 @@ visibility="public" > </field> +<field name="TYPE_TEXT_VARIATION_FILTER" + type="int" + transient="false" + volatile="false" + value="176" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> <field name="TYPE_TEXT_VARIATION_LONG_MESSAGE" type="int" transient="false" @@ -102533,6 +102646,17 @@ visibility="public" > </field> +<field name="TYPE_TEXT_VARIATION_PHONETIC" + type="int" + transient="false" + volatile="false" + value="192" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> <field name="TYPE_TEXT_VARIATION_POSTAL_ADDRESS" type="int" transient="false" @@ -102566,7 +102690,7 @@ visibility="public" > </field> -<field name="TYPE_TEXT_VARIATION_WEB_EDIT_TEXT" +<field name="TYPE_TEXT_VARIATION_VISIBLE_PASSWORD" type="int" transient="false" volatile="false" @@ -102577,6 +102701,17 @@ visibility="public" > </field> +<field name="TYPE_TEXT_VARIATION_WEB_EDIT_TEXT" + type="int" + transient="false" + volatile="false" + value="160" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> </interface> <class name="Layout" extends="java.lang.Object" @@ -135050,6 +135185,17 @@ visibility="public" > </field> +<field name="IME_ACTION_DONE" + type="int" + transient="false" + volatile="false" + value="5" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> <field name="IME_ACTION_GO" type="int" transient="false" @@ -135970,6 +136116,10 @@ deprecated="not deprecated" visibility="public" > +<parameter name="flags" type="int"> +</parameter> +<parameter name="resultReceiver" type="android.os.ResultReceiver"> +</parameter> </method> <method name="restartInput" return="void" @@ -136026,6 +136176,8 @@ > <parameter name="flags" type="int"> </parameter> +<parameter name="resultReceiver" type="android.os.ResultReceiver"> +</parameter> </method> <method name="startInput" return="void" @@ -136366,7 +136518,7 @@ </parameter> </method> <method name="hideSoftInputFromWindow" - return="void" + return="boolean" abstract="false" native="false" synchronized="false" @@ -136380,6 +136532,23 @@ <parameter name="flags" type="int"> </parameter> </method> +<method name="hideSoftInputFromWindow" + return="boolean" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="windowToken" type="android.os.IBinder"> +</parameter> +<parameter name="flags" type="int"> +</parameter> +<parameter name="resultReceiver" type="android.os.ResultReceiver"> +</parameter> +</method> <method name="hideStatusIcon" return="void" abstract="false" @@ -136509,7 +136678,22 @@ > </method> <method name="showSoftInput" - return="void" + return="boolean" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="view" type="android.view.View"> +</parameter> +<parameter name="flags" type="int"> +</parameter> +</method> +<method name="showSoftInput" + return="boolean" abstract="false" native="false" synchronized="false" @@ -136522,6 +136706,23 @@ </parameter> <parameter name="flags" type="int"> </parameter> +<parameter name="resultReceiver" type="android.os.ResultReceiver"> +</parameter> +</method> +<method name="showSoftInputFromInputMethod" + return="void" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="token" type="android.os.IBinder"> +</parameter> +<parameter name="flags" type="int"> +</parameter> </method> <method name="showStatusIcon" return="void" @@ -136540,6 +136741,38 @@ <parameter name="iconId" type="int"> </parameter> </method> +<method name="toggleSoftInput" + return="void" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="showFlags" type="int"> +</parameter> +<parameter name="hideFlags" type="int"> +</parameter> +</method> +<method name="toggleSoftInputFromWindow" + return="void" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="windowToken" type="android.os.IBinder"> +</parameter> +<parameter name="showFlags" type="int"> +</parameter> +<parameter name="hideFlags" type="int"> +</parameter> +</method> <method name="updateCursor" return="void" abstract="false" @@ -136621,6 +136854,50 @@ visibility="public" > </field> +<field name="RESULT_HIDDEN" + type="int" + transient="false" + volatile="false" + value="3" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> +<field name="RESULT_SHOWN" + type="int" + transient="false" + volatile="false" + value="2" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> +<field name="RESULT_UNCHANGED_HIDDEN" + type="int" + transient="false" + volatile="false" + value="1" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> +<field name="RESULT_UNCHANGED_SHOWN" + type="int" + transient="false" + volatile="false" + value="0" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> <field name="SHOW_FORCED" type="int" transient="false" @@ -136724,6 +137001,21 @@ visibility="public" > </method> +<method name="toggleSoftInput" + return="void" + abstract="true" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="showFlags" type="int"> +</parameter> +<parameter name="hideFlags" type="int"> +</parameter> +</method> <method name="updateCursor" return="void" abstract="true" @@ -138147,6 +138439,75 @@ </parameter> </method> </interface> +<class name="PluginData" + extends="java.lang.Object" + abstract="false" + static="false" + final="true" + deprecated="not deprecated" + visibility="public" +> +<constructor name="PluginData" + type="android.webkit.PluginData" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="stream" type="java.io.InputStream"> +</parameter> +<parameter name="length" type="long"> +</parameter> +<parameter name="headers" type="java.util.Map<java.lang.String, java.lang.String[]>"> +</parameter> +<parameter name="code" type="int"> +</parameter> +</constructor> +<method name="getContentLength" + return="long" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +</method> +<method name="getHeaders" + return="java.util.Map<java.lang.String, java.lang.String[]>" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +</method> +<method name="getInputStream" + return="java.io.InputStream" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +</method> +<method name="getStatusCode" + return="int" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +</method> +</class> <class name="PluginList" extends="java.lang.Object" abstract="false" @@ -138500,6 +138861,21 @@ deprecated="not deprecated" visibility="public" > +<method name="getPluginData" + return="android.webkit.PluginData" + abstract="true" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="url" type="java.lang.String"> +</parameter> +<parameter name="headers" type="java.util.Map<java.lang.String, java.lang.String>"> +</parameter> +</method> <method name="service" return="android.webkit.CacheManager.CacheResult" abstract="true" @@ -138507,7 +138883,7 @@ synchronized="false" static="false" final="false" - deprecated="not deprecated" + deprecated="deprecated" visibility="public" > <parameter name="url" type="java.lang.String"> @@ -138532,6 +138908,21 @@ visibility="public" > </constructor> +<method name="getPluginData" + return="android.webkit.PluginData" + abstract="false" + native="false" + synchronized="true" + static="true" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="url" type="java.lang.String"> +</parameter> +<parameter name="headers" type="java.util.Map<java.lang.String, java.lang.String>"> +</parameter> +</method> <method name="getSurrogate" return="android.webkit.CacheManager.CacheResult" abstract="false" @@ -138539,7 +138930,7 @@ synchronized="true" static="true" final="false" - deprecated="not deprecated" + deprecated="deprecated" visibility="public" > <parameter name="url" type="java.lang.String"> @@ -155451,6 +155842,17 @@ <parameter name="depth" type="int"> </parameter> </method> +<method name="didTouchFocusSelectAll" + return="boolean" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +</method> <method name="endBatchEdit" return="void" abstract="false" @@ -157233,17 +157635,6 @@ <parameter name="pixels" type="int"> </parameter> </method> -<method name="shouldAdvanceFocusOnEnter" - return="boolean" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="protected" -> -</method> </class> <class name="TextView.BufferType" extends="java.lang.Enum" diff --git a/cmds/dumpstate/dumpstate.c b/cmds/dumpstate/dumpstate.c index e08230f..5ef7499 100644 --- a/cmds/dumpstate/dumpstate.c +++ b/cmds/dumpstate/dumpstate.c @@ -127,7 +127,10 @@ static void dumpstate(int full) { PRINT("========================================================"); PRINT("== dumpsys"); PRINT("========================================================"); - EXEC("dumpsys"); + /* the full dumpsys is starting to take a long time, so we need + to increase its timeout. we really need to do the timeouts in + dumpsys itself... */ + EXEC_TIMEOUT("dumpsys", 40); } } diff --git a/cmds/dumpstate/dumpstate.h b/cmds/dumpstate/dumpstate.h index 4e88e4b..33127fb 100644 --- a/cmds/dumpstate/dumpstate.h +++ b/cmds/dumpstate/dumpstate.h @@ -43,6 +43,15 @@ run_command(&c, TIMEOUT); \ } +#define EXEC_TIMEOUT(cmd, tmout)\ +{ \ + static struct Command c = { \ + "/system/bin/" cmd, \ + { cmd, 0 } \ + }; \ + run_command(&c, tmout); \ +} + #define EXEC_XBIN(cmd) \ { \ static struct Command c = { \ diff --git a/core/java/android/database/sqlite/SQLiteProgram.java b/core/java/android/database/sqlite/SQLiteProgram.java index f89c87d..9e85452 100644 --- a/core/java/android/database/sqlite/SQLiteProgram.java +++ b/core/java/android/database/sqlite/SQLiteProgram.java @@ -22,7 +22,7 @@ import android.util.Log; * A base class for compiled SQLite programs. */ public abstract class SQLiteProgram extends SQLiteClosable { - static final String TAG = "SQLiteProgram"; + private static final String TAG = "SQLiteProgram"; /** The database this program is compiled against. */ protected SQLiteDatabase mDatabase; diff --git a/core/java/android/database/sqlite/SQLiteQuery.java b/core/java/android/database/sqlite/SQLiteQuery.java index 5bfa0e8..1386a0d 100644 --- a/core/java/android/database/sqlite/SQLiteQuery.java +++ b/core/java/android/database/sqlite/SQLiteQuery.java @@ -18,13 +18,14 @@ package android.database.sqlite; import android.database.CursorWindow; import android.os.SystemClock; +import android.util.Log; /** * A SQLite program that represents a query that reads the resulting rows into a CursorWindow. * This class is used by SQLiteCursor and isn't useful itself. */ public class SQLiteQuery extends SQLiteProgram { - //private static final String TAG = "Cursor"; + private static final String TAG = "Cursor"; /** The index of the unbound OFFSET parameter */ private int mOffsetIndex; @@ -73,6 +74,11 @@ public class SQLiteQuery extends SQLiteProgram { // is not safe in this situation. the native code will ignore maxRead int numRows = native_fill_window(window, window.getStartPosition(), mOffsetIndex, maxRead, lastPos); + + // Logging + if (SQLiteDebug.DEBUG_SQL_STATEMENTS) { + Log.d(TAG, "fillWindow(): " + mQuery); + } if (logStats) { mDatabase.logTimeStat(true /* read */, startTime, SystemClock.elapsedRealtime()); diff --git a/core/java/android/inputmethodservice/IInputMethodSessionWrapper.java b/core/java/android/inputmethodservice/IInputMethodSessionWrapper.java index 5a85c66..6cf90d6 100644 --- a/core/java/android/inputmethodservice/IInputMethodSessionWrapper.java +++ b/core/java/android/inputmethodservice/IInputMethodSessionWrapper.java @@ -30,6 +30,7 @@ class IInputMethodSessionWrapper extends IInputMethodSession.Stub private static final int DO_UPDATE_SELECTION = 90; private static final int DO_UPDATE_CURSOR = 95; private static final int DO_APP_PRIVATE_COMMAND = 100; + private static final int DO_TOGGLE_SOFT_INPUT = 105; final HandlerCaller mCaller; final InputMethodSession mInputMethodSession; @@ -106,6 +107,10 @@ class IInputMethodSessionWrapper extends IInputMethodSession.Stub mCaller.recycleArgs(args); return; } + case DO_TOGGLE_SOFT_INPUT: { + mInputMethodSession.toggleSoftInput(msg.arg1, msg.arg2); + return; + } } Log.w(TAG, "Unhandled message code: " + msg.what); } @@ -149,4 +154,8 @@ class IInputMethodSessionWrapper extends IInputMethodSession.Stub public void appPrivateCommand(String action, Bundle data) { mCaller.executeOrSendMessage(mCaller.obtainMessageOO(DO_APP_PRIVATE_COMMAND, action, data)); } + + public void toggleSoftInput(int showFlags, int hideFlags) { + mCaller.executeOrSendMessage(mCaller.obtainMessageII(DO_TOGGLE_SOFT_INPUT, showFlags, hideFlags)); + } } diff --git a/core/java/android/inputmethodservice/IInputMethodWrapper.java b/core/java/android/inputmethodservice/IInputMethodWrapper.java index a2c75b5..20a05a5 100644 --- a/core/java/android/inputmethodservice/IInputMethodWrapper.java +++ b/core/java/android/inputmethodservice/IInputMethodWrapper.java @@ -13,6 +13,7 @@ import android.os.Binder; import android.os.IBinder; import android.os.Message; import android.os.RemoteException; +import android.os.ResultReceiver; import android.util.Log; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputBinding; @@ -144,10 +145,10 @@ class IInputMethodWrapper extends IInputMethod.Stub mInputMethod.revokeSession((InputMethodSession)msg.obj); return; case DO_SHOW_SOFT_INPUT: - mInputMethod.showSoftInput(msg.arg1); + mInputMethod.showSoftInput(msg.arg1, (ResultReceiver)msg.obj); return; case DO_HIDE_SOFT_INPUT: - mInputMethod.hideSoftInput(); + mInputMethod.hideSoftInput(msg.arg1, (ResultReceiver)msg.obj); return; } Log.w(TAG, "Unhandled message code: " + msg.what); @@ -225,12 +226,13 @@ class IInputMethodWrapper extends IInputMethod.Stub } } - public void showSoftInput(int flags) { - mCaller.executeOrSendMessage(mCaller.obtainMessageI(DO_SHOW_SOFT_INPUT, - flags)); + public void showSoftInput(int flags, ResultReceiver resultReceiver) { + mCaller.executeOrSendMessage(mCaller.obtainMessageIO(DO_SHOW_SOFT_INPUT, + flags, resultReceiver)); } - public void hideSoftInput() { - mCaller.executeOrSendMessage(mCaller.obtainMessage(DO_HIDE_SOFT_INPUT)); + public void hideSoftInput(int flags, ResultReceiver resultReceiver) { + mCaller.executeOrSendMessage(mCaller.obtainMessageIO(DO_HIDE_SOFT_INPUT, + flags, resultReceiver)); } } diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java index 1e2e2f3..f1e613e 100644 --- a/core/java/android/inputmethodservice/InputMethodService.java +++ b/core/java/android/inputmethodservice/InputMethodService.java @@ -26,6 +26,7 @@ import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.IBinder; +import android.os.ResultReceiver; import android.os.SystemClock; import android.provider.Settings; import android.text.InputType; @@ -53,7 +54,6 @@ import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.EditorInfo; import android.widget.Button; import android.widget.FrameLayout; - import java.io.FileDescriptor; import java.io.PrintWriter; @@ -348,23 +348,37 @@ public class InputMethodService extends AbstractInputMethodService { /** * Handle a request by the system to hide the soft input area. */ - public void hideSoftInput() { + public void hideSoftInput(int flags, ResultReceiver resultReceiver) { if (DEBUG) Log.v(TAG, "hideSoftInput()"); + boolean wasVis = isInputViewShown(); mShowInputFlags = 0; mShowInputRequested = false; mShowInputForced = false; hideWindow(); + if (resultReceiver != null) { + resultReceiver.send(wasVis != isInputViewShown() + ? InputMethodManager.RESULT_HIDDEN + : (wasVis ? InputMethodManager.RESULT_UNCHANGED_SHOWN + : InputMethodManager.RESULT_UNCHANGED_HIDDEN), null); + } } /** * Handle a request by the system to show the soft input area. */ - public void showSoftInput(int flags) { + public void showSoftInput(int flags, ResultReceiver resultReceiver) { if (DEBUG) Log.v(TAG, "showSoftInput()"); + boolean wasVis = isInputViewShown(); mShowInputFlags = 0; if (onShowInputRequested(flags, false)) { showWindow(true); } + if (resultReceiver != null) { + resultReceiver.send(wasVis != isInputViewShown() + ? InputMethodManager.RESULT_SHOWN + : (wasVis ? InputMethodManager.RESULT_UNCHANGED_SHOWN + : InputMethodManager.RESULT_UNCHANGED_HIDDEN), null); + } } } @@ -440,6 +454,13 @@ public class InputMethodService extends AbstractInputMethodService { } InputMethodService.this.onAppPrivateCommand(action, data); } + + /** + * + */ + public void toggleSoftInput(int showFlags, int hideFlags) { + InputMethodService.this.onToggleSoftInput(showFlags, hideFlags); + } } /** @@ -1048,7 +1069,7 @@ public class InputMethodService extends AbstractInputMethodService { * text; you can override this (not calling the base class implementation) * to perform whatever behavior you would like. * - * @boolean finishingInput If true, {@link #onFinishInput} will be + * @param finishingInput If true, {@link #onFinishInput} will be * called immediately after. */ public void onFinishInputView(boolean finishingInput) { @@ -1092,7 +1113,7 @@ public class InputMethodService extends AbstractInputMethodService { * text; you can override this (not calling the base class implementation) * to perform whatever behavior you would like. * - * @boolean finishingInput If true, {@link #onFinishInput} will be + * @param finishingInput If true, {@link #onFinishInput} will be * called immediately after. */ public void onFinishCandidatesView(boolean finishingInput) { @@ -1107,14 +1128,14 @@ public class InputMethodService extends AbstractInputMethodService { /** * The system has decided that it may be time to show your input method. * This is called due to a corresponding call to your - * {@link InputMethod#showSoftInput(int) InputMethod.showSoftInput(int)} + * {@link InputMethod#showSoftInput InputMethod.showSoftInput()} * method. The default implementation uses * {@link #onEvaluateInputViewShown()}, {@link #onEvaluateFullscreenMode()}, * and the current configuration to decide whether the input view should * be shown at this point. * * @param flags Provides additional information about the show request, - * as per {@link InputMethod#showSoftInput(int) InputMethod.showSoftInput(int)}. + * as per {@link InputMethod#showSoftInput InputMethod.showSoftInput()}. * @param configChange This is true if we are re-showing due to a * configuration change. * @return Returns true to indicate that the window should be shown. @@ -1290,7 +1311,7 @@ public class InputMethodService extends AbstractInputMethodService { mStartedInputConnection = null; mCurCompletions = null; } - + void doStartInput(InputConnection ic, EditorInfo attribute, boolean restarting) { if (!restarting) { doFinishInput(); @@ -1399,11 +1420,25 @@ public class InputMethodService extends AbstractInputMethodService { * 0 or have the {@link InputMethodManager#HIDE_IMPLICIT_ONLY * InputMethodManager.HIDE_IMPLICIT_ONLY} bit set. */ - public void dismissSoftInput(int flags) { + public void requestHideSelf(int flags) { mImm.hideSoftInputFromInputMethod(mToken, flags); } /** + * Show the input method. This is a call back to the + * IMF to handle showing the input method. + * Close this input method's soft input area, removing it from the display. + * The input method will continue running, but the user can no longer use + * it to generate input by touching the screen. + * @param flags Provides additional operating flags. Currently may be + * 0 or have the {@link InputMethodManager#SHOW_FORCED + * InputMethodManager.} bit set. + */ + private void requestShowSelf(int flags) { + mImm.showSoftInputFromInputMethod(mToken, flags); + } + + /** * Override this to intercept key down events before they are processed by the * application. If you return true, the application will not itself * process the event. If you return true, the normal application processing @@ -1421,7 +1456,7 @@ public class InputMethodService extends AbstractInputMethodService { if (mShowInputRequested) { // If the soft input area is shown, back closes it and we // consume the back key. - dismissSoftInput(0); + requestHideSelf(0); return true; } else if (mWindowVisible) { if (mCandidatesVisibility == View.VISIBLE) { @@ -1438,7 +1473,6 @@ public class InputMethodService extends AbstractInputMethodService { } } } - return doMovementKey(keyCode, event, MOVEMENT_DOWN); } @@ -1480,6 +1514,18 @@ public class InputMethodService extends AbstractInputMethodService { public void onAppPrivateCommand(String action, Bundle data) { } + /** + * Handle a request by the system to toggle the soft input area. + */ + private void onToggleSoftInput(int showFlags, int hideFlags) { + if (DEBUG) Log.v(TAG, "toggleSoftInput()"); + if (isInputViewShown()) { + requestHideSelf(hideFlags); + } else { + requestShowSelf(showFlags); + } + } + static final int MOVEMENT_DOWN = -1; static final int MOVEMENT_UP = -2; @@ -1737,6 +1783,8 @@ public class InputMethodService extends AbstractInputMethodService { return getText(com.android.internal.R.string.ime_action_send); case EditorInfo.IME_ACTION_NEXT: return getText(com.android.internal.R.string.ime_action_next); + case EditorInfo.IME_ACTION_DONE: + return getText(com.android.internal.R.string.ime_action_done); default: return getText(com.android.internal.R.string.ime_action_default); } @@ -1777,7 +1825,7 @@ public class InputMethodService extends AbstractInputMethodService { */ public void onExtractingInputChanged(EditorInfo ei) { if (ei.inputType == InputType.TYPE_NULL) { - dismissSoftInput(InputMethodManager.HIDE_NOT_ALWAYS); + requestHideSelf(InputMethodManager.HIDE_NOT_ALWAYS); } } diff --git a/core/java/android/inputmethodservice/KeyboardView.java b/core/java/android/inputmethodservice/KeyboardView.java index c838779..f58b7ef 100755 --- a/core/java/android/inputmethodservice/KeyboardView.java +++ b/core/java/android/inputmethodservice/KeyboardView.java @@ -502,7 +502,7 @@ public class KeyboardView extends View implements View.OnClickListener { } private CharSequence adjustCase(CharSequence label) { - if (mKeyboard.isShifted() && label != null && label.length() == 1 + if (mKeyboard.isShifted() && label != null && label.length() < 3 && Character.isLowerCase(label.charAt(0))) { label = label.toString().toUpperCase(); } diff --git a/core/java/android/net/http/AndroidHttpClient.java b/core/java/android/net/http/AndroidHttpClient.java index 0c4fcda..c2013d5 100644 --- a/core/java/android/net/http/AndroidHttpClient.java +++ b/core/java/android/net/http/AndroidHttpClient.java @@ -63,6 +63,7 @@ import android.util.Log; import android.content.ContentResolver; import android.provider.Settings; import android.text.TextUtils; +import android.os.SystemProperties; /** * Subclass of the Apache {@link DefaultHttpClient} that is configured with @@ -387,10 +388,12 @@ public final class AndroidHttpClient implements HttpClient { } /** - * Returns true if auth logging is turned on for this configuration. + * Returns true if auth logging is turned on for this configuration. Can only be set on + * insecure devices. */ private boolean isAuthLoggable() { - return Log.isLoggable(tag + "-auth", level); + String secure = SystemProperties.get("ro.secure"); + return "0".equals(secure) && Log.isLoggable(tag + "-auth", level); } /** diff --git a/core/java/android/os/ResultReceiver.aidl b/core/java/android/os/ResultReceiver.aidl new file mode 100644 index 0000000..28ce6d5 --- /dev/null +++ b/core/java/android/os/ResultReceiver.aidl @@ -0,0 +1,20 @@ +/* //device/java/android/android/os/ParcelFileDescriptor.aidl +** +** Copyright 2007, 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. +*/ + +package android.os; + +parcelable ResultReceiver; diff --git a/core/java/android/os/ResultReceiver.java b/core/java/android/os/ResultReceiver.java new file mode 100644 index 0000000..711d4d9 --- /dev/null +++ b/core/java/android/os/ResultReceiver.java @@ -0,0 +1,130 @@ +/* + * 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. + */ + +package android.os; + +import com.android.internal.os.IResultReceiver; + +/** + * Generic interface for receiving a callback result from someone. Use this + * by creating a subclass and implement {@link #onReceiveResult}, which you can + * then pass to others and send through IPC, and receive results they + * supply with {@link #send}. + */ +public class ResultReceiver implements Parcelable { + final boolean mLocal; + final Handler mHandler; + + IResultReceiver mReceiver; + + class MyRunnable implements Runnable { + final int mResultCode; + final Bundle mResultData; + + MyRunnable(int resultCode, Bundle resultData) { + mResultCode = resultCode; + mResultData = resultData; + } + + public void run() { + onReceiveResult(mResultCode, mResultData); + } + } + + class MyResultReceiver extends IResultReceiver.Stub { + public void send(int resultCode, Bundle resultData) { + if (mHandler != null) { + mHandler.post(new MyRunnable(resultCode, resultData)); + } else { + onReceiveResult(resultCode, resultData); + } + } + } + + /** + * Create a new ResultReceive to receive results. Your + * {@link #onReceiveResult} method will be called from the thread running + * <var>handler</var> if given, or from an arbitrary thread if null. + */ + public ResultReceiver(Handler handler) { + mLocal = true; + mHandler = handler; + } + + /** + * Deliver a result to this receiver. Will call {@link #onReceiveResult}, + * always asynchronously if the receiver has supplied a Handler in which + * to dispatch the result. + * @param resultCode Arbitrary result code to deliver, as defined by you. + * @param resultData Any additional data provided by you. + */ + public void send(int resultCode, Bundle resultData) { + if (mLocal) { + if (mHandler != null) { + mHandler.post(new MyRunnable(resultCode, resultData)); + } else { + onReceiveResult(resultCode, resultData); + } + return; + } + + if (mReceiver != null) { + try { + mReceiver.send(resultCode, resultData); + } catch (RemoteException e) { + } + } + } + + /** + * Override to receive results delivered to this object. + * + * @param resultCode Arbitrary result code delivered by the sender, as + * defined by the sender. + * @param resultData Any additional data provided by the sender. + */ + protected void onReceiveResult(int resultCode, Bundle resultData) { + } + + public int describeContents() { + return 0; + } + + public void writeToParcel(Parcel out, int flags) { + synchronized (this) { + if (mReceiver == null) { + mReceiver = new MyResultReceiver(); + } + out.writeStrongBinder(mReceiver.asBinder()); + } + } + + ResultReceiver(Parcel in) { + mLocal = false; + mHandler = null; + mReceiver = IResultReceiver.Stub.asInterface(in.readStrongBinder()); + } + + public static final Parcelable.Creator<ResultReceiver> CREATOR + = new Parcelable.Creator<ResultReceiver>() { + public ResultReceiver createFromParcel(Parcel in) { + return new ResultReceiver(in); + } + public ResultReceiver[] newArray(int size) { + return new ResultReceiver[size]; + } + }; +} diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index b536b0d..b0ee479 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -2825,6 +2825,11 @@ public final class Settings { public static final String BATTERY_DISCHARGE_DURATION_THRESHOLD = "battery_discharge_duration_threshold"; public static final String BATTERY_DISCHARGE_THRESHOLD = "battery_discharge_threshold"; + + /** + * An email address that anr bugreports should be sent to. + */ + public static final String ANR_BUGREPORT_RECIPIENT = "anr_bugreport_recipient"; /** * @deprecated diff --git a/core/java/android/provider/Telephony.java b/core/java/android/provider/Telephony.java index 18c64ed..d802c14 100644 --- a/core/java/android/provider/Telephony.java +++ b/core/java/android/provider/Telephony.java @@ -1023,6 +1023,11 @@ public final class Telephony { * <P>Type: INTEGER</P> */ public static final String ERROR = "error"; + /** + * Indicates whether this thread contains any attachments. + * <P>Type: INTEGER</P> + */ + public static final String HAS_ATTACHMENT = "has_attachment"; } /** diff --git a/core/java/android/text/InputType.java b/core/java/android/text/InputType.java index f643f92..d50684a 100644 --- a/core/java/android/text/InputType.java +++ b/core/java/android/text/InputType.java @@ -179,9 +179,27 @@ public interface InputType { public static final int TYPE_TEXT_VARIATION_PASSWORD = 0x00000080; /** + * Variation of {@link #TYPE_CLASS_TEXT}: entering a password, which should + * be visible to the user. + */ + public static final int TYPE_TEXT_VARIATION_VISIBLE_PASSWORD = 0x00000090; + + /** * Variation of {@link #TYPE_CLASS_TEXT}: entering text inside of a web form. */ - public static final int TYPE_TEXT_VARIATION_WEB_EDIT_TEXT = 0x00000090; + public static final int TYPE_TEXT_VARIATION_WEB_EDIT_TEXT = 0x000000a0; + + /** + * Variation of {@link #TYPE_CLASS_TEXT}: entering text to filter contents + * of a list etc. + */ + public static final int TYPE_TEXT_VARIATION_FILTER = 0x000000b0; + + /** + * Variation of {@link #TYPE_CLASS_TEXT}: entering text for phonetic + * pronunciation, such as a phonetic name field in contacts. + */ + public static final int TYPE_TEXT_VARIATION_PHONETIC = 0x000000c0; // ---------------------------------------------------------------------- // ---------------------------------------------------------------------- diff --git a/core/java/android/text/method/ArrowKeyMovementMethod.java b/core/java/android/text/method/ArrowKeyMovementMethod.java index 6df0b35..8aa49af 100644 --- a/core/java/android/text/method/ArrowKeyMovementMethod.java +++ b/core/java/android/text/method/ArrowKeyMovementMethod.java @@ -204,7 +204,7 @@ implements MovementMethod MotionEvent event) { boolean handled = Touch.onTouchEvent(widget, buffer, event); - if (widget.isFocused()) { + if (widget.isFocused() && !widget.didTouchFocusSelectAll()) { if (event.getAction() == MotionEvent.ACTION_UP) { int x = (int) event.getX(); int y = (int) event.getY(); diff --git a/core/java/android/text/method/QwertyKeyListener.java b/core/java/android/text/method/QwertyKeyListener.java index 0b39517..3f8288c 100644 --- a/core/java/android/text/method/QwertyKeyListener.java +++ b/core/java/android/text/method/QwertyKeyListener.java @@ -296,21 +296,28 @@ public class QwertyKeyListener extends BaseKeyListener { String old = new String(repl[0].mText); content.removeSpan(repl[0]); - content.setSpan(TextKeyListener.INHIBIT_REPLACEMENT, - en, en, Spannable.SPAN_POINT_POINT); - content.replace(st, en, old); - en = content.getSpanStart(TextKeyListener.INHIBIT_REPLACEMENT); - if (en - 1 >= 0) { + // only cancel the autocomplete if the cursor is at the end of + // the replaced span + if (selStart == en) { content.setSpan(TextKeyListener.INHIBIT_REPLACEMENT, - en - 1, en, - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + en, en, Spannable.SPAN_POINT_POINT); + content.replace(st, en, old); + + en = content.getSpanStart(TextKeyListener.INHIBIT_REPLACEMENT); + if (en - 1 >= 0) { + content.setSpan(TextKeyListener.INHIBIT_REPLACEMENT, + en - 1, en, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + } else { + content.removeSpan(TextKeyListener.INHIBIT_REPLACEMENT); + } + adjustMetaAfterKeypress(content); } else { - content.removeSpan(TextKeyListener.INHIBIT_REPLACEMENT); + adjustMetaAfterKeypress(content); + return super.onKeyDown(view, content, keyCode, event); } - adjustMetaAfterKeypress(content); - return true; } } diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 70cc2a9..dc7b299 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -1387,14 +1387,10 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager // The child need to draw an animation, potentially offscreen, so // make sure we do not cancel invalidate requests mPrivateFlags |= DRAW_ANIMATION; - // Enlarge the invalidate region to account for rounding errors - // in Animation#getInvalidateRegion(); Using 0.5f is unfortunately - // not enough for some types of animations (e.g. scale down.) - final int left = cl + (int) (region.left - 1.0f); - final int top = ct + (int) (region.top - 1.0f); - invalidate(left, top, - left + (int) (region.width() + 1.0f), - top + (int) (region.height() + 1.0f)); + + final int left = cl + (int) region.left; + final int top = ct + (int) region.top; + invalidate(left, top, left + (int) region.width(), top + (int) region.height()); } } } else if ((flags & FLAG_SUPPORT_STATIC_TRANSFORMATIONS) == diff --git a/core/java/android/view/animation/Animation.java b/core/java/android/view/animation/Animation.java index b9c8ec3..a662760 100644 --- a/core/java/android/view/animation/Animation.java +++ b/core/java/android/view/animation/Animation.java @@ -340,6 +340,7 @@ public abstract class Animation implements Cloneable { * to run. */ public void restrictDuration(long durationMillis) { + // If we start after the duration, then we just won't run. if (mStartOffset > durationMillis) { mStartOffset = durationMillis; mDuration = 0; @@ -349,11 +350,26 @@ public abstract class Animation implements Cloneable { long dur = mDuration + mStartOffset; if (dur > durationMillis) { - mDuration = dur = durationMillis-mStartOffset; + mDuration = durationMillis-mStartOffset; + dur = durationMillis; } + // If the duration is 0 or less, then we won't run. + if (mDuration <= 0) { + mDuration = 0; + mRepeatCount = 0; + return; + } + // Reduce the number of repeats to keep below the maximum duration. + // The comparison between mRepeatCount and duration is to catch + // overflows after multiplying them. if (mRepeatCount < 0 || mRepeatCount > durationMillis || (dur*mRepeatCount) > durationMillis) { - mRepeatCount = (int)(durationMillis/dur); + // Figure out how many times to do the animation. Subtract 1 since + // repeat count is the number of times to repeat so 0 runs once. + mRepeatCount = (int)(durationMillis/dur) - 1; + if (mRepeatCount < 0) { + mRepeatCount = 0; + } } } @@ -416,7 +432,7 @@ public abstract class Animation implements Cloneable { * Sets how many times the animation should be repeated. If the repeat * count is 0, the animation is never repeated. If the repeat count is * greater than 0 or {@link #INFINITE}, the repeat mode will be taken - * into account. The repeat count if 0 by default. + * into account. The repeat count is 0 by default. * * @param repeatCount the number of times the animation should be repeated * @attr ref android.R.styleable#Animation_repeatCount @@ -806,6 +822,8 @@ public abstract class Animation implements Cloneable { invalidate.set(left, top, right, bottom); transformation.getMatrix().mapRect(invalidate); + // Enlarge the invalidate region to account for rounding errors + invalidate.inset(-1.0f, -1.0f); tempRegion.set(invalidate); invalidate.union(previousRegion); @@ -830,6 +848,8 @@ public abstract class Animation implements Cloneable { public void initializeInvalidateRegion(int left, int top, int right, int bottom) { final RectF region = mPreviousRegion; region.set(left, top, right, bottom); + // Enlarge the invalidate region to account for rounding errors + region.inset(-1.0f, -1.0f); if (mFillBefore) { final Transformation previousTransformation = mPreviousTransformation; applyTransformation(0.0f, previousTransformation); diff --git a/core/java/android/view/animation/AnimationSet.java b/core/java/android/view/animation/AnimationSet.java index 590ce06..98b2594 100644 --- a/core/java/android/view/animation/AnimationSet.java +++ b/core/java/android/view/animation/AnimationSet.java @@ -266,32 +266,10 @@ public class AnimationSet extends Animation { /** * @hide */ - public void getInvalidateRegion(int left, int top, int right, int bottom, - RectF invalidate, Transformation transformation) { - - final RectF previousRegion = mPreviousRegion; - - invalidate.set(left, top, right, bottom); - transformation.getMatrix().mapRect(invalidate); - invalidate.union(previousRegion); - - previousRegion.set(left, top, right, bottom); - transformation.getMatrix().mapRect(previousRegion); - - final Transformation tempTransformation = mTransformation; - final Transformation previousTransformation = mPreviousTransformation; - - tempTransformation.set(transformation); - transformation.set(previousTransformation); - previousTransformation.set(tempTransformation); - } - - /** - * @hide - */ public void initializeInvalidateRegion(int left, int top, int right, int bottom) { final RectF region = mPreviousRegion; region.set(left, top, right, bottom); + region.inset(-1.0f, -1.0f); if (mFillBefore) { final int count = mAnimations.size(); @@ -400,8 +378,12 @@ public class AnimationSet extends Animation { long[] storedOffsets = mStoredOffsets; - if (storedOffsets == null || storedOffsets.length != count) { - storedOffsets = mStoredOffsets = new long[count]; + if (startOffsetSet) { + if (storedOffsets == null || storedOffsets.length != count) { + storedOffsets = mStoredOffsets = new long[count]; + } + } else if (storedOffsets != null) { + storedOffsets = mStoredOffsets = null; } for (int i = 0; i < count; i++) { @@ -446,7 +428,6 @@ public class AnimationSet extends Animation { final ArrayList<Animation> children = mAnimations; final int count = children.size(); - for (int i = 0; i < count; i++) { children.get(i).setStartOffset(offsets[i]); } diff --git a/core/java/android/view/inputmethod/EditorInfo.java b/core/java/android/view/inputmethod/EditorInfo.java index 0405371..1c0d42a 100644 --- a/core/java/android/view/inputmethod/EditorInfo.java +++ b/core/java/android/view/inputmethod/EditorInfo.java @@ -66,6 +66,12 @@ public class EditorInfo implements InputType, Parcelable { public static final int IME_ACTION_NEXT = 0x00000004; /** + * Bits of {@link #IME_MASK_ACTION}: the action key performs a "done" + * operation, typically meaning the IME will be closed. + */ + public static final int IME_ACTION_DONE = 0x00000005; + + /** * Flag of {@link #imeOptions}: used in conjunction with * {@link #IME_MASK_ACTION}, this indicates that the action should not * be available in-line as the same as a "enter" key. Typically this is diff --git a/core/java/android/view/inputmethod/InputMethod.java b/core/java/android/view/inputmethod/InputMethod.java index 740dca8..a5e0e94 100644 --- a/core/java/android/view/inputmethod/InputMethod.java +++ b/core/java/android/view/inputmethod/InputMethod.java @@ -18,6 +18,7 @@ package android.view.inputmethod; import android.inputmethodservice.InputMethodService; import android.os.IBinder; +import android.os.ResultReceiver; /** * The InputMethod interface represents an input method which can generate key @@ -171,7 +172,7 @@ public interface InputMethod { public void revokeSession(InputMethodSession session); /** - * Flag for {@link #showSoftInput(int)}: this show has been explicitly + * Flag for {@link #showSoftInput}: this show has been explicitly * requested by the user. If not set, the system has decided it may be * a good idea to show the input method based on a navigation operation * in the UI. @@ -179,7 +180,7 @@ public interface InputMethod { public static final int SHOW_EXPLICIT = 0x00001; /** - * Flag for {@link #showSoftInput(int)}: this show has been forced to + * Flag for {@link #showSoftInput}: this show has been forced to * happen by the user. If set, the input method should remain visible * until deliberated dismissed by the user in its UI. */ @@ -188,13 +189,29 @@ public interface InputMethod { /** * Request that any soft input part of the input method be shown to the user. * - * @param flags Provide additional information about the show request. + * @param flags Provides additional information about the show request. * Currently may be 0 or have the bit {@link #SHOW_EXPLICIT} set. + * @param resultReceiver The client requesting the show may wish to + * be told the impact of their request, which should be supplied here. + * The result code should be + * {@link InputMethodManager#RESULT_UNCHANGED_SHOWN InputMethodManager.RESULT_UNCHANGED_SHOWN}, + * {@link InputMethodManager#RESULT_UNCHANGED_HIDDEN InputMethodManager.RESULT_UNCHANGED_HIDDEN}, + * {@link InputMethodManager#RESULT_SHOWN InputMethodManager.RESULT_SHOWN}, or + * {@link InputMethodManager#RESULT_HIDDEN InputMethodManager.RESULT_HIDDEN}. */ - public void showSoftInput(int flags); + public void showSoftInput(int flags, ResultReceiver resultReceiver); /** * Request that any soft input part of the input method be hidden from the user. + * @param flags Provides additional information about the show request. + * Currently always 0. + * @param resultReceiver The client requesting the show may wish to + * be told the impact of their request, which should be supplied here. + * The result code should be + * {@link InputMethodManager#RESULT_UNCHANGED_SHOWN InputMethodManager.RESULT_UNCHANGED_SHOWN}, + * {@link InputMethodManager#RESULT_UNCHANGED_HIDDEN InputMethodManager.RESULT_UNCHANGED_HIDDEN}, + * {@link InputMethodManager#RESULT_SHOWN InputMethodManager.RESULT_SHOWN}, or + * {@link InputMethodManager#RESULT_HIDDEN InputMethodManager.RESULT_HIDDEN}. */ - public void hideSoftInput(); + public void hideSoftInput(int flags, ResultReceiver resultReceiver); } diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java index 0aa1d6c..916ffea 100644 --- a/core/java/android/view/inputmethod/InputMethodManager.java +++ b/core/java/android/view/inputmethod/InputMethodManager.java @@ -24,6 +24,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.RemoteException; +import android.os.ResultReceiver; import android.os.ServiceManager; import android.util.Log; import android.util.PrintWriterPrinter; @@ -287,6 +288,9 @@ public final class InputMethodManager { // ----------------------------------------------------------- static final int MSG_DUMP = 1; + static final int MSG_BIND = 2; + static final int MSG_UNBIND = 3; + static final int MSG_SET_ACTIVE = 4; class H extends Handler { H(Looper looper) { @@ -309,6 +313,68 @@ public final class InputMethodManager { } return; } + case MSG_BIND: { + final InputBindResult res = (InputBindResult)msg.obj; + synchronized (mH) { + if (mBindSequence < 0 || mBindSequence != res.sequence) { + Log.w(TAG, "Ignoring onBind: cur seq=" + mBindSequence + + ", given seq=" + res.sequence); + return; + } + + mCurMethod = res.method; + mCurId = res.id; + mBindSequence = res.sequence; + } + startInputInner(); + return; + } + case MSG_UNBIND: { + final int sequence = msg.arg1; + synchronized (mH) { + if (mBindSequence == sequence) { + if (false) { + // XXX the server has already unbound! + if (mCurMethod != null && mCurrentTextBoxAttribute != null) { + try { + mCurMethod.finishInput(); + } catch (RemoteException e) { + Log.w(TAG, "IME died: " + mCurId, e); + } + } + } + clearBindingLocked(); + + // If we were actively using the last input method, then + // we would like to re-connect to the next input method. + if (mServedView != null && mServedView.isFocused()) { + mServedConnecting = true; + } + } + startInputInner(); + } + return; + } + case MSG_SET_ACTIVE: { + final boolean active = msg.arg1 != 0; + synchronized (mH) { + mActive = active; + mFullscreenMode = false; + if (!active) { + // Some other client has starting using the IME, so note + // that this happened and make sure our own editor's + // state is reset. + mHasBeenInactive = true; + try { + // Note that finishComposingText() is allowed to run + // even when we are not active. + mIInputContext.finishComposingText(); + } catch (RemoteException e) { + } + } + } + return; + } } } } @@ -348,62 +414,15 @@ public final class InputMethodManager { } public void onBindMethod(InputBindResult res) { - synchronized (mH) { - if (mBindSequence < 0 || mBindSequence != res.sequence) { - Log.w(TAG, "Ignoring onBind: cur seq=" + mBindSequence - + ", given seq=" + res.sequence); - return; - } - - mCurMethod = res.method; - mCurId = res.id; - mBindSequence = res.sequence; - } - startInputInner(); + mH.sendMessage(mH.obtainMessage(MSG_BIND, res)); } public void onUnbindMethod(int sequence) { - synchronized (mH) { - if (mBindSequence == sequence) { - if (false) { - // XXX the server has already unbound! - if (mCurMethod != null && mCurrentTextBoxAttribute != null) { - try { - mCurMethod.finishInput(); - } catch (RemoteException e) { - Log.w(TAG, "IME died: " + mCurId, e); - } - } - } - clearBindingLocked(); - - // If we were actively using the last input method, then - // we would like to re-connect to the next input method. - if (mServedView != null && mServedView.isFocused()) { - mServedConnecting = true; - } - } - startInputInner(); - } + mH.sendMessage(mH.obtainMessage(MSG_UNBIND, sequence, 0)); } public void setActive(boolean active) { - synchronized (mH) { - mActive = active; - mFullscreenMode = false; - if (!active) { - // Some other client has starting using the IME, so note - // that this happened and make sure our own editor's - // state is reset. - mHasBeenInactive = true; - try { - // Note that finishComposingText() is allowed to run - // even when we are not active. - mIInputContext.finishComposingText(); - } catch (RemoteException e) { - } - } - } + mH.sendMessage(mH.obtainMessage(MSG_SET_ACTIVE, active ? 1 : 0, 0)); } }; @@ -646,6 +665,52 @@ public final class InputMethodManager { public static final int SHOW_FORCED = 0x0002; /** + * Synonym for {@link #showSoftInput(View, int, ResultReceiver)} without + * a result receiver: explicitly request that the current input method's + * soft input area be shown to the user, if needed. + * + * @param view The currently focused view, which would like to receive + * soft keyboard input. + * @param flags Provides additional operating flags. Currently may be + * 0 or have the {@link #SHOW_IMPLICIT} bit set. + */ + public boolean showSoftInput(View view, int flags) { + return showSoftInput(view, flags, null); + } + + /** + * Flag for the {@link ResultReceiver} result code from + * {@link #showSoftInput(View, int, ResultReceiver)} and + * {@link #hideSoftInputFromWindow(IBinder, int, ResultReceiver)}: the + * state of the soft input window was unchanged and remains shown. + */ + public static final int RESULT_UNCHANGED_SHOWN = 0; + + /** + * Flag for the {@link ResultReceiver} result code from + * {@link #showSoftInput(View, int, ResultReceiver)} and + * {@link #hideSoftInputFromWindow(IBinder, int, ResultReceiver)}: the + * state of the soft input window was unchanged and remains hidden. + */ + public static final int RESULT_UNCHANGED_HIDDEN = 1; + + /** + * Flag for the {@link ResultReceiver} result code from + * {@link #showSoftInput(View, int, ResultReceiver)} and + * {@link #hideSoftInputFromWindow(IBinder, int, ResultReceiver)}: the + * state of the soft input window changed from hidden to shown. + */ + public static final int RESULT_SHOWN = 2; + + /** + * Flag for the {@link ResultReceiver} result code from + * {@link #showSoftInput(View, int, ResultReceiver)} and + * {@link #hideSoftInputFromWindow(IBinder, int, ResultReceiver)}: the + * state of the soft input window changed from shown to hidden. + */ + public static final int RESULT_HIDDEN = 3; + + /** * Explicitly request that the current input method's soft input area be * shown to the user, if needed. Call this if the user interacts with * your view in such a way that they have expressed they would like to @@ -655,25 +720,33 @@ public final class InputMethodManager { * soft keyboard input. * @param flags Provides additional operating flags. Currently may be * 0 or have the {@link #SHOW_IMPLICIT} bit set. + * @param resultReceiver If non-null, this will be called by the IME when + * it has processed your request to tell you what it has done. The result + * code you receive may be either {@link #RESULT_UNCHANGED_SHOWN}, + * {@link #RESULT_UNCHANGED_HIDDEN}, {@link #RESULT_SHOWN}, or + * {@link #RESULT_HIDDEN}. */ - public void showSoftInput(View view, int flags) { + public boolean showSoftInput(View view, int flags, + ResultReceiver resultReceiver) { checkFocus(); synchronized (mH) { if (mServedView != view) { - return; + return false; } try { - mService.showSoftInput(mClient, flags); + return mService.showSoftInput(mClient, flags, resultReceiver); } catch (RemoteException e) { } + + return false; } } /** @hide */ - public void showSoftInputUnchecked(int flags) { + public void showSoftInputUnchecked(int flags, ResultReceiver resultReceiver) { try { - mService.showSoftInput(mClient, flags); + mService.showSoftInput(mClient, flags, resultReceiver); } catch (RemoteException e) { } } @@ -693,6 +766,20 @@ public final class InputMethodManager { public static final int HIDE_NOT_ALWAYS = 0x0002; /** + * Synonym for {@link #hideSoftInputFromWindow(IBinder, int, ResultReceiver) + * without a result: request to hide the soft input window from the + * context of the window that is currently accepting input. + * + * @param windowToken The token of the window that is making the request, + * as returned by {@link View#getWindowToken() View.getWindowToken()}. + * @param flags Provides additional operating flags. Currently may be + * 0 or have the {@link #HIDE_IMPLICIT_ONLY} bit set. + */ + public boolean hideSoftInputFromWindow(IBinder windowToken, int flags) { + return hideSoftInputFromWindow(windowToken, flags, null); + } + + /** * Request to hide the soft input window from the context of the window * that is currently accepting input. This should be called as a result * of the user doing some actually than fairly explicitly requests to @@ -702,21 +789,77 @@ public final class InputMethodManager { * as returned by {@link View#getWindowToken() View.getWindowToken()}. * @param flags Provides additional operating flags. Currently may be * 0 or have the {@link #HIDE_IMPLICIT_ONLY} bit set. + * @param resultReceiver If non-null, this will be called by the IME when + * it has processed your request to tell you what it has done. The result + * code you receive may be either {@link #RESULT_UNCHANGED_SHOWN}, + * {@link #RESULT_UNCHANGED_HIDDEN}, {@link #RESULT_SHOWN}, or + * {@link #RESULT_HIDDEN}. */ - public void hideSoftInputFromWindow(IBinder windowToken, int flags) { + public boolean hideSoftInputFromWindow(IBinder windowToken, int flags, + ResultReceiver resultReceiver) { checkFocus(); synchronized (mH) { if (mServedView == null || mServedView.getWindowToken() != windowToken) { - return; + return false; } try { - mService.hideSoftInput(mClient, flags); + return mService.hideSoftInput(mClient, flags, resultReceiver); } catch (RemoteException e) { } + return false; } } + + /** + * This method toggles the input method window display. + * If the input window is already displayed, it gets hidden. + * If not the input window will be displayed. + * @param windowToken The token of the window that is making the request, + * as returned by {@link View#getWindowToken() View.getWindowToken()}. + * @param showFlags Provides additional operating flags. May be + * 0 or have the {@link #SHOW_IMPLICIT}, + * {@link #SHOW_FORCED} bit set. + * @param hideFlags Provides additional operating flags. May be + * 0 or have the {@link #HIDE_IMPLICIT_ONLY}, + * {@link #HIDE_NOT_ALWAYS} bit set. + **/ + public void toggleSoftInputFromWindow(IBinder windowToken, int showFlags, int hideFlags) { + synchronized (mH) { + if (mServedView == null || mServedView.getWindowToken() != windowToken) { + return; + } + if (mCurMethod != null) { + try { + mCurMethod.toggleSoftInput(showFlags, hideFlags); + } catch (RemoteException e) { + } + } + } + } + + /* + * This method toggles the input method window display. + * If the input window is already displayed, it gets hidden. + * If not the input window will be displayed. + * @param showFlags Provides additional operating flags. May be + * 0 or have the {@link #SHOW_IMPLICIT}, + * {@link #SHOW_FORCED} bit set. + * @param hideFlags Provides additional operating flags. May be + * 0 or have the {@link #HIDE_IMPLICIT_ONLY}, + * {@link #HIDE_NOT_ALWAYS} bit set. + * @hide + */ + public void toggleSoftInput(int showFlags, int hideFlags) { + if (mCurMethod != null) { + try { + mCurMethod.toggleSoftInput(showFlags, hideFlags); + } catch (RemoteException e) { + } + } + } + /** * If the input method is currently connected to the given view, * restart it with its new contents. You should call this when the text @@ -956,7 +1099,7 @@ public final class InputMethodManager { void closeCurrentInput() { try { - mService.hideSoftInput(mClient, HIDE_NOT_ALWAYS); + mService.hideSoftInput(mClient, HIDE_NOT_ALWAYS, null); } catch (RemoteException e) { } } @@ -1118,7 +1261,8 @@ public final class InputMethodManager { * when it was started, which allows it to perform this operation on * itself. * @param flags Provides additional operating flags. Currently may be - * 0 or have the {@link #HIDE_IMPLICIT_ONLY} bit set. + * 0 or have the {@link #HIDE_IMPLICIT_ONLY}, + * {@link #HIDE_NOT_ALWAYS} bit set. */ public void hideSoftInputFromInputMethod(IBinder token, int flags) { try { @@ -1129,6 +1273,27 @@ public final class InputMethodManager { } /** + * Show the input method's soft input area, so the user + * sees the input method window and can interact with it. + * This can only be called from the currently active input method, + * as validated by the given token. + * + * @param token Supplies the identifying token given to an input method + * when it was started, which allows it to perform this operation on + * itself. + * @param flags Provides additional operating flags. Currently may be + * 0 or have the {@link #SHOW_IMPLICIT} or + * {@link #SHOW_FORCED} bit set. + */ + public void showSoftInputFromInputMethod(IBinder token, int flags) { + try { + mService.showMySoftInput(token, flags); + } catch (RemoteException e) { + throw new RuntimeException(e); + } + } + + /** * @hide */ public void dispatchKeyEvent(Context context, int seq, KeyEvent key, @@ -1204,7 +1369,7 @@ public final class InputMethodManager { } } } - + void doDump(FileDescriptor fd, PrintWriter fout, String[] args) { final Printer p = new PrintWriterPrinter(fout); p.println("Input method client state for " + this + ":"); diff --git a/core/java/android/view/inputmethod/InputMethodSession.java b/core/java/android/view/inputmethod/InputMethodSession.java index b5bbaff..bb03afa 100644 --- a/core/java/android/view/inputmethod/InputMethodSession.java +++ b/core/java/android/view/inputmethod/InputMethodSession.java @@ -139,4 +139,16 @@ public interface InputMethodSession { * @param data Any data to include with the command. */ public void appPrivateCommand(String action, Bundle data); + + /** + * Toggle the soft input window. + * Applications can toggle the state of the soft input window. + * @param showFlags Provides additional operating flags. May be + * 0 or have the {@link InputMethodManager#SHOW_IMPLICIT}, + * {@link InputMethodManager#SHOW_FORCED} bit set. + * @param hideFlags Provides additional operating flags. May be + * 0 or have the {@link InputMethodManager#HIDE_IMPLICIT_ONLY}, + * {@link InputMethodManager#HIDE_NOT_ALWAYS} bit set. + */ + public void toggleSoftInput(int showFlags, int hideFlags); } diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java index 451af6d..5401a6e 100644 --- a/core/java/android/webkit/BrowserFrame.java +++ b/core/java/android/webkit/BrowserFrame.java @@ -201,10 +201,14 @@ class BrowserFrame extends Handler { final String failingUrl) { // As this is called for the main resource and loading will be stopped // after, reset the state variables. + resetLoadingStates(); + mCallbackProxy.onReceivedError(errorCode, description, failingUrl); + } + + private void resetLoadingStates() { mCommitted = true; mWebViewCore.mEndScaleZoom = mFirstLayoutDone == false; mFirstLayoutDone = true; - mCallbackProxy.onReceivedError(errorCode, description, failingUrl); } /* package */boolean committed() { @@ -290,6 +294,7 @@ class BrowserFrame extends Handler { if (isMainFrame || loadType == FRAME_LOADTYPE_STANDARD) { if (isMainFrame) { + resetLoadingStates(); mCallbackProxy.switchOutDrawHistory(); mCallbackProxy.onPageFinished(url); } @@ -555,8 +560,11 @@ class BrowserFrame extends Handler { method, isHighPriority); loader.setHeaders(headers); loader.setPostData(postData); - loader.setCacheMode(cacheMode); // Set the load mode to the mode used - // for the current page. + // Set the load mode to the mode used for the current page. + // If WebKit wants validation, go to network directly. + loader.setCacheMode(headers.containsKey("If-Modified-Since") + || headers.containsKey("If-None-Match") ? + WebSettings.LOAD_NO_CACHE : cacheMode); // Set referrer to current URL? if (!loader.executeLoad()) { checker.responseAlert("startLoadingResource fail"); @@ -751,7 +759,14 @@ class BrowserFrame extends Handler { /** * Stop loading the current page. */ - public native void stopLoading(); + public void stopLoading() { + if (mIsMainFrame) { + resetLoadingStates(); + } + nativeStopLoading(); + } + + private native void nativeStopLoading(); /** * Return true if the document has images. diff --git a/core/java/android/webkit/FrameLoader.java b/core/java/android/webkit/FrameLoader.java index 5e323eb..42d03f0 100644 --- a/core/java/android/webkit/FrameLoader.java +++ b/core/java/android/webkit/FrameLoader.java @@ -21,7 +21,6 @@ import android.net.http.RequestHandle; import android.util.Config; import android.util.Log; import android.webkit.CacheManager.CacheResult; -import android.webkit.UrlInterceptRegistry; import java.util.HashMap; import java.util.Map; @@ -234,12 +233,14 @@ class FrameLoader { private boolean handleUrlIntercept() { // Check if the URL can be served from UrlIntercept. If // successful, return the data just like a cache hit. - CacheResult result = UrlInterceptRegistry.getSurrogate( + + PluginData data = UrlInterceptRegistry.getPluginData( mListener.url(), mHeaders); - if(result != null) { - // Intercepted. The data is stored in result.stream. Setup - // a load from the CacheResult. - startCacheLoad(result); + + if(data != null) { + PluginContentLoader loader = + new PluginContentLoader(mListener, data); + loader.load(); return true; } // Not intercepted. Carry on as normal. diff --git a/core/java/android/webkit/LoadListener.java b/core/java/android/webkit/LoadListener.java index dfae17d..8d4b220 100644 --- a/core/java/android/webkit/LoadListener.java +++ b/core/java/android/webkit/LoadListener.java @@ -1126,6 +1126,7 @@ class LoadListener extends Handler implements EventHandler { mCacheResult = null; } + // This will strip the anchor setUrl(redirectTo); // Redirect may be in the cache @@ -1143,7 +1144,7 @@ class LoadListener extends Handler implements EventHandler { // mRequestHandle can be null when the request was satisfied // by the cache, and the cache returned a redirect if (mRequestHandle != null) { - mRequestHandle.setupRedirect(redirectTo, mStatusCode, + mRequestHandle.setupRedirect(mUrl, mStatusCode, mRequestHeaders); } else { // If the original request came from the cache, there is no @@ -1336,19 +1337,16 @@ class LoadListener extends Handler implements EventHandler { */ void setUrl(String url) { if (url != null) { - if (URLUtil.isDataUrl(url)) { - // Don't strip anchor as that is a valid part of the URL - mUrl = url; - } else { - mUrl = URLUtil.stripAnchor(url); - } mUri = null; - if (URLUtil.isNetworkUrl(mUrl)) { + if (URLUtil.isNetworkUrl(url)) { + mUrl = URLUtil.stripAnchor(url); try { mUri = new WebAddress(mUrl); } catch (ParseException e) { e.printStackTrace(); } + } else { + mUrl = url; } } } diff --git a/core/java/android/webkit/PluginContentLoader.java b/core/java/android/webkit/PluginContentLoader.java new file mode 100644 index 0000000..2069599 --- /dev/null +++ b/core/java/android/webkit/PluginContentLoader.java @@ -0,0 +1,96 @@ +/* + * 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. + */ + +package android.webkit; + +import android.net.http.Headers; + +import java.io.InputStream; +import java.util.*; + +import org.apache.http.util.CharArrayBuffer; + +/** + * This class is a concrete implementation of StreamLoader that uses a + * PluginData object as the source for the stream. + */ +class PluginContentLoader extends StreamLoader { + + private PluginData mData; // Content source + + /** + * Constructs a PluginDataLoader for use when loading content from + * a plugin. + * + * @param loadListener LoadListener to pass the content to + * @param data PluginData used as the source for the content. + */ + PluginContentLoader(LoadListener loadListener, PluginData data) { + super(loadListener); + mData = data; + } + + @Override + protected boolean setupStreamAndSendStatus() { + mDataStream = mData.getInputStream(); + mContentLength = mData.getContentLength(); + mHandler.status(1, 1, mData.getStatusCode(), "OK"); + return true; + } + + @Override + protected void buildHeaders(Headers headers) { + // Crate a CharArrayBuffer with an arbitrary initial capacity. + CharArrayBuffer buffer = new CharArrayBuffer(100); + Iterator<Map.Entry<String, String[]>> responseHeadersIt = + mData.getHeaders().entrySet().iterator(); + while (responseHeadersIt.hasNext()) { + Map.Entry<String, String[]> entry = responseHeadersIt.next(); + // Headers.parseHeader() expects lowercase keys, so keys + // such as "Accept-Ranges" will fail to parse. + // + // UrlInterceptHandler instances supply a mapping of + // lowercase key to [ unmodified key, value ], so for + // Headers.parseHeader() to succeed, we need to construct + // a string using the key (i.e. entry.getKey()) and the + // element denoting the header value in the + // [ unmodified key, value ] pair (i.e. entry.getValue()[1). + // + // The reason why UrlInterceptHandler instances supply such a + // mapping in the first place is historical. Early versions of + // the Gears plugin used java.net.HttpURLConnection, which always + // returned headers names as capitalized strings. When these were + // fed back into webkit, they failed to parse. + // + // Mewanwhile, Gears was modified to use Apache HTTP library + // instead, so this design is now obsolete. Changing it however, + // would require changes to the Gears C++ codebase and QA-ing and + // submitting a new binary to the Android tree. Given the + // timelines for the next Android release, we will not do this + // for now. + // + // TODO: fix C++ Gears to remove the need for this + // design. + String keyValue = entry.getKey() + ": " + entry.getValue()[1]; + buffer.ensureCapacity(keyValue.length()); + buffer.append(keyValue); + // Parse it into the header container. + headers.parseHeader(buffer); + // Clear the buffer + buffer.clear(); + } + } +} diff --git a/core/java/android/webkit/PluginData.java b/core/java/android/webkit/PluginData.java new file mode 100644 index 0000000..2b539fe --- /dev/null +++ b/core/java/android/webkit/PluginData.java @@ -0,0 +1,116 @@ +/* + * 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. + */ + +package android.webkit; + +import java.io.InputStream; +import java.util.Map; + +/** + * This class encapsulates the content generated by a plugin. The + * data itself is meant to be loaded into webkit via the + * PluginContentLoader class, which needs to be able to construct an + * HTTP response. For this, it needs a stream with the response body, + * the length of the body, the response headers, and the response + * status code. The PluginData class is the container for all these + * parts. + * + */ +public final class PluginData { + /** + * The content stream. + */ + private InputStream mStream; + /** + * The content length. + */ + private long mContentLength; + /** + * The associated HTTP response headers stored as a map of + * lowercase header name to [ unmodified header name, header value]. + * TODO: This design was always a hack. Remove (involves updating + * the Gears C++ side). + */ + private Map<String, String[]> mHeaders; + + /** + * The index of the header value in the above mapping. + */ + private int mHeaderValueIndex; + /** + * The associated HTTP response code. + */ + private int mStatusCode; + + /** + * Creates a PluginData instance. + * + * @param stream The stream that supplies content for the plugin. + * @param length The length of the plugin content. + * @param headers The response headers. Map of + * lowercase header name to [ unmodified header name, header value] + * @param length The HTTP response status code. + */ + public PluginData( + InputStream stream, + long length, + Map<String, String[]> headers, + int code) { + mStream = stream; + mContentLength = length; + mHeaders = headers; + mStatusCode = code; + } + + /** + * Returns the input stream that contains the plugin content. + * + * @return An InputStream instance with the plugin content. + */ + public InputStream getInputStream() { + return mStream; + } + + /** + * Returns the length of the plugin content. + * + * @return the length of the plugin content. + */ + public long getContentLength() { + return mContentLength; + } + + /** + * Returns the HTTP response headers associated with the plugin + * content. + * + * @return A Map<String, String[]> containing all headers. The + * mapping is 'lowercase header name' to ['unmodified header + * name', header value]. + */ + public Map<String, String[]> getHeaders() { + return mHeaders; + } + + /** + * Returns the HTTP status code for the response. + * + * @return The HTTP statue code, e.g 200. + */ + public int getStatusCode() { + return mStatusCode; + } +} diff --git a/core/java/android/webkit/TextDialog.java b/core/java/android/webkit/TextDialog.java index 8a82411..39806dc 100644 --- a/core/java/android/webkit/TextDialog.java +++ b/core/java/android/webkit/TextDialog.java @@ -113,13 +113,7 @@ import java.util.ArrayList; // that other applications that use embedded WebViews will properly // display the text in textfields. setTextColor(Color.BLACK); - } - - @Override - protected boolean shouldAdvanceFocusOnEnter() { - // In the browser, single line textfields use enter as a form submit, - // so we never want to advance the focus on enter. - return false; + setImeOptions(EditorInfo.IME_ACTION_NONE); } @Override diff --git a/core/java/android/webkit/UrlInterceptHandler.java b/core/java/android/webkit/UrlInterceptHandler.java index e1c9d61..9216413 100644 --- a/core/java/android/webkit/UrlInterceptHandler.java +++ b/core/java/android/webkit/UrlInterceptHandler.java @@ -17,6 +17,7 @@ package android.webkit; import android.webkit.CacheManager.CacheResult; +import android.webkit.PluginData; import java.util.Map; public interface UrlInterceptHandler { @@ -29,6 +30,20 @@ public interface UrlInterceptHandler { * @param url URL string. * @param headers The headers associated with the request. May be null. * @return The CacheResult containing the surrogate response. + * @Deprecated Use PluginData getPluginData(String url, + * Map<String, String> headers); instead */ + @Deprecated public CacheResult service(String url, Map<String, String> headers); + + /** + * Given an URL, returns the PluginData which contains the + * surrogate response for the request, or null if the handler is + * not interested. + * + * @param url URL string. + * @param headers The headers associated with the request. May be null. + * @return The PluginData containing the surrogate response. + */ + public PluginData getPluginData(String url, Map<String, String> headers); } diff --git a/core/java/android/webkit/UrlInterceptRegistry.java b/core/java/android/webkit/UrlInterceptRegistry.java index a218191..6051f29 100644 --- a/core/java/android/webkit/UrlInterceptRegistry.java +++ b/core/java/android/webkit/UrlInterceptRegistry.java @@ -17,6 +17,7 @@ package android.webkit; import android.webkit.CacheManager.CacheResult; +import android.webkit.PluginData; import android.webkit.UrlInterceptHandler; import java.util.Iterator; @@ -82,17 +83,21 @@ public final class UrlInterceptRegistry { UrlInterceptHandler handler) { return getHandlers().remove(handler); } - + /** * Given an url, returns the CacheResult of the first * UrlInterceptHandler interested, or null if none are. - * + * * @return A CacheResult containing surrogate content. + * @Deprecated Use PluginData getPluginData( String url, + * Map<String, String> headers) instead. */ + @Deprecated public static synchronized CacheResult getSurrogate( String url, Map<String, String> headers) { - if (urlInterceptDisabled()) + if (urlInterceptDisabled()) { return null; + } Iterator iter = getHandlers().listIterator(); while (iter.hasNext()) { UrlInterceptHandler handler = (UrlInterceptHandler) iter.next(); @@ -103,4 +108,27 @@ public final class UrlInterceptRegistry { } return null; } + + /** + * Given an url, returns the PluginData of the first + * UrlInterceptHandler interested, or null if none are or if + * intercepts are disabled. + * + * @return A PluginData instance containing surrogate content. + */ + public static synchronized PluginData getPluginData( + String url, Map<String, String> headers) { + if (urlInterceptDisabled()) { + return null; + } + Iterator iter = getHandlers().listIterator(); + while (iter.hasNext()) { + UrlInterceptHandler handler = (UrlInterceptHandler) iter.next(); + PluginData data = handler.getPluginData(url, headers); + if (data != null) { + return data; + } + } + return null; + } } diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 5126ef0..91795a3 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -689,7 +689,10 @@ public class WebView extends AbsoluteLayout return true; } - public void onSimpleZoom(boolean zoomIn) { + public void onSimpleZoom(boolean zoomIn, int centerX, int centerY) { + mZoomCenterX = (float) centerX; + mZoomCenterY = (float) centerY; + if (zoomIn) { zoomIn(); } else { @@ -736,12 +739,12 @@ public class WebView extends AbsoluteLayout mFocusData.mY = 0; mScroller = new Scroller(context); mZoomRingController = new ZoomRingController(context, this); - mZoomRingController.setResetThumbAutomatically(false); mZoomRingController.setCallback(mZoomListener); - mZoomRingController.setZoomRingTrack( + mZoomRingController.setTrackDrawable( com.android.internal.R.drawable.zoom_ring_track_absolute); - mZoomRingController.setPannerAcceleration(160); - mZoomRingController.setPannerStartAcceleratingDuration(700); + float density = context.getResources().getDisplayMetrics().density; + mZoomRingController.setPannerAcceleration((int) (160 * density)); + mZoomRingController.setPannerStartAcceleratingDuration((int) (700 * density)); createZoomRingOverviewTab(); mZoomButtonsController = new ZoomButtonsController(context, this); mZoomButtonsController.setOverviewVisible(true); @@ -760,7 +763,7 @@ public class WebView extends AbsoluteLayout } public void onZoom(boolean zoomIn) { - mZoomListener.onSimpleZoom(zoomIn); + mZoomListener.onSimpleZoom(zoomIn, getWidth() / 2, getHeight() / 2); } }); } @@ -4491,6 +4494,14 @@ public class WebView extends AbsoluteLayout return zoomControls; } + // This used to be the value returned by ViewConfiguration.getTouchSlop(). + // We pass this to the navigation cache to find where the user clicked. + // TouchSlop has been increased for other purposes, but for the + // navigation cache it is too big, and may result in clicking the wrong + // spot. This is a concern when the cache is out of date, and clicking + // finds a node which is wrong but nearby. + private static final int NAV_SLOP = 12; + private void updateSelection() { if (mNativeClass == 0) { return; @@ -4498,7 +4509,7 @@ public class WebView extends AbsoluteLayout // mLastTouchX and mLastTouchY are the point in the current viewport int contentX = viewToContent((int) mLastTouchX + mScrollX); int contentY = viewToContent((int) mLastTouchY + mScrollY); - int contentSize = ViewConfiguration.getTouchSlop(); + int contentSize = NAV_SLOP; Rect rect = new Rect(contentX - contentSize, contentY - contentSize, contentX + contentSize, contentY + contentSize); // If we were already focused on a textfield, update its cache. @@ -4513,7 +4524,7 @@ public class WebView extends AbsoluteLayout View v = mTextEntry; int x = viewToContent((v.getLeft() + v.getRight()) >> 1); int y = viewToContent((v.getTop() + v.getBottom()) >> 1); - int contentSize = ViewConfiguration.get(getContext()).getScaledTouchSlop(); + int contentSize = NAV_SLOP; nativeMotionUp(x, y, contentSize, true); } } @@ -4526,7 +4537,7 @@ public class WebView extends AbsoluteLayout // mLastTouchX and mLastTouchY are the point in the current viewport int contentX = viewToContent((int) mLastTouchX + mScrollX); int contentY = viewToContent((int) mLastTouchY + mScrollY); - int contentSize = ViewConfiguration.get(getContext()).getScaledTouchSlop(); + int contentSize = NAV_SLOP; if (nativeMotionUp(contentX, contentY, contentSize, true)) { if (mLogEvent) { Checkin.updateStats(mContext.getContentResolver(), diff --git a/core/java/android/webkit/gears/UrlInterceptHandlerGears.java b/core/java/android/webkit/gears/UrlInterceptHandlerGears.java index 2a5cbe9..43104bf 100644 --- a/core/java/android/webkit/gears/UrlInterceptHandlerGears.java +++ b/core/java/android/webkit/gears/UrlInterceptHandlerGears.java @@ -25,16 +25,14 @@ package android.webkit.gears; -import android.net.http.Headers; import android.util.Log; -import android.webkit.CacheManager; import android.webkit.CacheManager.CacheResult; import android.webkit.Plugin; +import android.webkit.PluginData; import android.webkit.UrlInterceptRegistry; import android.webkit.UrlInterceptHandler; import android.webkit.WebView; -import org.apache.http.impl.cookie.DateUtils; import org.apache.http.util.CharArrayBuffer; import java.io.*; @@ -53,12 +51,6 @@ public class UrlInterceptHandlerGears implements UrlInterceptHandler { private static final String LOG_TAG = "Gears-J"; /** Buffer size for reading/writing streams. */ private static final int BUFFER_SIZE = 4096; - /** - * Number of milliseconds to expire LocalServer temporary entries in - * the browser's cache. Somewhat arbitrarily chosen as a compromise - * between being a) long enough not to expire during page load and - * b) short enough to evict entries during a session. */ - private static final int CACHE_EXPIRY_MS = 60000; // 1 minute. /** Enable/disable all logging in this class. */ private static boolean logEnabled = false; /** The unmodified (case-sensitive) key in the headers map is the @@ -140,6 +132,8 @@ public class UrlInterceptHandlerGears implements UrlInterceptHandler { private String encoding; // The stream which contains the body when read(). private InputStream inputStream; + // The length of the content body. + private long contentLength; /** * Initialize members using an in-memory array to return the body. @@ -160,6 +154,7 @@ public class UrlInterceptHandlerGears implements UrlInterceptHandler { this.mimeType = mimeType; this.encoding = encoding; // Setup a stream to read out of the byte array. + this.contentLength = body.length; this.inputStream = new ByteArrayInputStream(body); } @@ -185,7 +180,9 @@ public class UrlInterceptHandlerGears implements UrlInterceptHandler { this.encoding = encoding; try { // Setup a stream to read out of a file on disk. - this.inputStream = new FileInputStream(new File(path)); + File file = new File(path); + this.contentLength = file.length(); + this.inputStream = new FileInputStream(file); return true; } catch (java.io.FileNotFoundException ex) { log("File not found: " + path); @@ -274,6 +271,13 @@ public class UrlInterceptHandlerGears implements UrlInterceptHandler { public InputStream getInputStream() { return inputStream; } + + /** + * @return The length of the response body. + */ + public long getContentLength() { + return contentLength; + } } /** @@ -319,44 +323,32 @@ public class UrlInterceptHandlerGears implements UrlInterceptHandler { UrlInterceptRegistry.unregisterHandler(this); } - /** - * Copy the entire InputStream to OutputStream. - * @param inputStream The stream to read from. - * @param outputStream The stream to write to. - * @return True if the entire stream copied successfully, false on error. - */ - private boolean copyStream(InputStream inputStream, - OutputStream outputStream) { - try { - // Temporary buffer to copy stream through. - byte[] buf = new byte[BUFFER_SIZE]; - for (;;) { - // Read up to BUFFER_SIZE bytes. - int bytes = inputStream.read(buf); - if (bytes < 0) { - break; - } - // Write the number of bytes we just read. - outputStream.write(buf, 0, bytes); - } - } catch (IOException ex) { - log("Got IOException copying stream: " + ex); - return false; + /** + * Given an URL, returns the CacheResult which contains the + * surrogate response for the request, or null if the handler is + * not interested. + * + * @param url URL string. + * @param headers The headers associated with the request. May be null. + * @return The CacheResult containing the surrogate response. + * @Deprecated Use PluginData getPluginData(String url, + * Map<String, String> headers); instead + */ + @Deprecated + public CacheResult service(String url, Map<String, String> headers) { + throw new UnsupportedOperationException("unimplemented"); } - return true; - } /** - * Given an URL, returns a CacheResult which contains the response - * for the request. This implements the UrlInterceptHandler interface. + * Given an URL, returns a PluginData instance which contains the + * response for the request. This implements the UrlInterceptHandler + * interface. * - * @param url The fully qualified URL being requested. + * @param url The fully qualified URL being requested. * @param requestHeaders The request headers for this URL. - * @return If a response can be crafted, a CacheResult initialized - * to return the surrogate response. If this URL cannot - * be serviced, returns null. + * @return a PluginData object. */ - public CacheResult service(String url, Map<String, String> requestHeaders) { + public PluginData getPluginData(String url, Map<String, String> requestHeaders) { // Thankfully the browser does call us with case-sensitive // headers. We just need to map it case-insensitive. Map<String, String[]> lowercaseRequestHeaders = @@ -374,86 +366,10 @@ public class UrlInterceptHandlerGears implements UrlInterceptHandler { // No result for this URL. return null; } - // Translate the ServiceResponse to a CacheResult. - // Translate http -> gears, https -> gearss, so we don't overwrite - // existing entries. - String gearsUrl = "gears" + url.substring("http".length()); - // Set the result to expire, so that entries don't pollute the - // browser's cache for too long. - long now_ms = System.currentTimeMillis(); - String expires = DateUtils.formatDate(new Date(now_ms + CACHE_EXPIRY_MS)); - response.setResponseHeader(ApacheHttpRequestAndroid.KEY_EXPIRES, expires); - // The browser is only interested in a small subset of headers, - // contained in a Headers object. Iterate the map of all headers - // and add them to Headers. - Headers headers = new Headers(); - Iterator<Map.Entry<String, String[]>> responseHeadersIt = - response.getResponseHeaders().entrySet().iterator(); - while (responseHeadersIt.hasNext()) { - Map.Entry<String, String[]> entry = responseHeadersIt.next(); - // Headers.parseHeader() expects lowercase keys. - String keyValue = entry.getKey() + ": " - + entry.getValue()[HEADERS_MAP_INDEX_VALUE]; - CharArrayBuffer buffer = new CharArrayBuffer(keyValue.length()); - buffer.append(keyValue); - // Parse it into the header container. - headers.parseHeader(buffer); - } - CacheResult cacheResult = CacheManager.createCacheFile( - gearsUrl, - response.getStatusCode(), - headers, - response.getMimeType(), - true); // forceCache - - if (cacheResult == null) { - // With the no-cache policy we could end up - // with a null result - return null; - } - - // Set encoding if specified. - String encoding = response.getEncoding(); - if (encoding != null) { - cacheResult.setEncoding(encoding); - } - // Copy the response body to the CacheResult. This handles all - // combinations of memory vs on-disk on both sides. - InputStream inputStream = response.getInputStream(); - OutputStream outputStream = cacheResult.getOutputStream(); - boolean copied = copyStream(inputStream, outputStream); - // Close the input and output streams to relinquish their - // resources earlier. - try { - inputStream.close(); - } catch (IOException ex) { - log("IOException closing InputStream: " + ex); - copied = false; - } - try { - outputStream.close(); - } catch (IOException ex) { - log("IOException closing OutputStream: " + ex); - copied = false; - } - if (!copied) { - log("copyStream of local result failed"); - return null; - } - // Save the entry into the browser's cache. - CacheManager.saveCacheFile(gearsUrl, cacheResult); - // Get it back from the cache, this time properly initialized to - // be used for input. - cacheResult = CacheManager.getCacheFile(gearsUrl, null); - if (cacheResult != null) { - log("Returning surrogate result"); - return cacheResult; - } else { - // Not an expected condition, but handle gracefully. Perhaps out - // of memory or disk? - Log.e(LOG_TAG, "Lost CacheResult between save and get. Can't serve.\n"); - return null; - } + return new PluginData(response.getInputStream(), + response.getContentLength(), + response.getResponseHeaders(), + response.getStatusCode()); } /** diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 9da78d0..d72570a 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -2766,6 +2766,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te private void showPopup() { // Make sure we have a window before showing the popup if (getWindowVisibility() == View.VISIBLE) { + createTextFilter(true); positionPopup(false); // Make sure we get focus if we are showing the popup checkFocus(); @@ -2913,8 +2914,8 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te if (mPopup == null) { Context c = getContext(); PopupWindow p = new PopupWindow(c); - LayoutInflater layoutInflater = (LayoutInflater) c - .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + LayoutInflater layoutInflater = (LayoutInflater) + c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mTextFilter = (EditText) layoutInflater.inflate( com.android.internal.R.layout.typing_filter, null); mTextFilter.addTextChangedListener(this); @@ -3136,6 +3137,14 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te */ int viewType; + /** + * When this boolean is set, the view has been added to the AbsListView + * at least once. It is used to know whether headers/footers have already + * been added to the list view and whether they should be treated as + * recycled views or not. + */ + boolean recycledHeaderFooter; + public LayoutParams(Context c, AttributeSet attrs) { super(c, attrs); } @@ -3269,7 +3278,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te if (lp != null && lp.viewType != AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER) { // Note: We do place AdapterView.ITEM_VIEW_TYPE_IGNORE in active views. // However, we will NOT place them into scrap views. - activeViews[i] = getChildAt(i); + activeViews[i] = child; } } } diff --git a/core/java/android/widget/FastScroller.java b/core/java/android/widget/FastScroller.java index 57e21e4..0a552e8 100644 --- a/core/java/android/widget/FastScroller.java +++ b/core/java/android/widget/FastScroller.java @@ -62,6 +62,8 @@ class FastScroller { private int mVisibleItem; private Paint mPaint; private int mListOffset; + private int mItemCount = -1; + private boolean mLongList; private Object [] mSections; private String mSectionText; @@ -219,8 +221,12 @@ class FastScroller { void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { - // Are there enough pages to require fast scroll? - if (visibleItemCount > 0 && totalItemCount / visibleItemCount < MIN_PAGES) { + // Are there enough pages to require fast scroll? Recompute only if total count changes + if (mItemCount != totalItemCount && visibleItemCount > 0) { + mItemCount = totalItemCount; + mLongList = mItemCount / visibleItemCount >= MIN_PAGES; + } + if (!mLongList) { if (mState != STATE_NONE) { setState(STATE_NONE); } diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java index 6bbf062..11fab8f 100644 --- a/core/java/android/widget/GridView.java +++ b/core/java/android/widget/GridView.java @@ -929,6 +929,7 @@ public class GridView extends AbsListView { if (p == null) { p = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0); + child.setLayoutParams(p); } p.viewType = mAdapter.getItemViewType(0); @@ -1328,11 +1329,8 @@ public class GridView extends AbsListView { */ @Override void setSelectionInt(int position) { - mBlockLayoutRequests = true; setNextSelectedPositionInt(position); layoutChildren(); - - mBlockLayoutRequests = false; } @Override diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java index a4523b9..480b0b8 100644 --- a/core/java/android/widget/ImageView.java +++ b/core/java/android/widget/ImageView.java @@ -333,6 +333,12 @@ public class ImageView extends View { resizeFromDrawable(); } + /** + * Sets the image level, when it is constructed from a + * {@link android.graphics.drawable.LevelListDrawable}. + * + * @param level The new level for the image. + */ @android.view.RemotableViewMethod public void setImageLevel(int level) { mLevel = level; diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java index 404a4ee..c2f3a85 100644 --- a/core/java/android/widget/ListView.java +++ b/core/java/android/widget/ListView.java @@ -26,7 +26,6 @@ import android.os.Parcel; import android.os.Parcelable; import android.util.AttributeSet; import android.util.SparseBooleanArray; -import android.util.SparseArray; import android.view.FocusFinder; import android.view.KeyEvent; import android.view.MotionEvent; @@ -1040,6 +1039,7 @@ public class ListView extends AbsListView { if (p == null) { p = new LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0); + child.setLayoutParams(p); } p.viewType = mAdapter.getItemViewType(position); @@ -1320,6 +1320,8 @@ public class ListView extends AbsListView { final boolean blockLayoutRequests = mBlockLayoutRequests; if (!blockLayoutRequests) { mBlockLayoutRequests = true; + } else { + return; } try { @@ -1429,15 +1431,12 @@ public class ListView extends AbsListView { // we can remember the focused view to restore after relayout if the // data hasn't changed, or if the focused position is a header or footer if (!dataChanged || isDirectChildHeaderOrFooter(focusedChild)) { - focusLayoutRestoreDirectChild = getFocusedChild(); - if (focusLayoutRestoreDirectChild != null) { - - // remember the specific view that had focus - focusLayoutRestoreView = findFocus(); - if (focusLayoutRestoreView != null) { - // tell it we are going to mess with it - focusLayoutRestoreView.onStartTemporaryDetach(); - } + focusLayoutRestoreDirectChild = focusedChild; + // remember the specific view that had focus + focusLayoutRestoreView = findFocus(); + if (focusLayoutRestoreView != null) { + // tell it we are going to mess with it + focusLayoutRestoreView.onStartTemporaryDetach(); } } requestFocus(); @@ -1657,9 +1656,12 @@ public class ListView extends AbsListView { } p.viewType = mAdapter.getItemViewType(position); - if (recycled) { + if (recycled || (p.recycledHeaderFooter && p.viewType == AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER)) { attachViewToParent(child, flowDown ? -1 : 0, p); } else { + if (p.viewType == AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER) { + p.recycledHeaderFooter = true; + } addViewInLayout(child, flowDown ? -1 : 0, p, true); } @@ -1766,10 +1768,8 @@ public class ListView extends AbsListView { */ @Override void setSelectionInt(int position) { - mBlockLayoutRequests = true; setNextSelectedPositionInt(position); layoutChildren(); - mBlockLayoutRequests = false; } /** diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 080f3de..3f4912f 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -33,6 +33,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.Parcel; import android.os.Parcelable; +import android.os.ResultReceiver; import android.os.SystemClock; import android.os.Message; import android.text.BoringLayout; @@ -234,6 +235,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener private CharWrapper mCharWrapper = null; private boolean mSelectionMoved = false; + private boolean mTouchFocusSelectedAll = false; private Marquee mMarquee; private boolean mRestartMarquee; @@ -837,6 +839,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (password) { setTransformationMethod(PasswordTransformationMethod.getInstance()); typefaceIndex = MONOSPACE; + } else if ((mInputType&(EditorInfo.TYPE_MASK_CLASS + |EditorInfo.TYPE_MASK_VARIATION)) + == (EditorInfo.TYPE_CLASS_TEXT + |EditorInfo.TYPE_TEXT_VARIATION_PASSWORD)) { + typefaceIndex = MONOSPACE; } setTypefaceByIndex(typefaceIndex, styleIndex); @@ -2244,6 +2251,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener int selEnd; CharSequence text; boolean frozenWithFocus; + CharSequence error; SavedState(Parcelable superState) { super(superState); @@ -2256,6 +2264,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener out.writeInt(selEnd); out.writeInt(frozenWithFocus ? 1 : 0); TextUtils.writeToParcel(text, out, flags); + + if (error == null) { + out.writeInt(0); + } else { + out.writeInt(1); + TextUtils.writeToParcel(error, out, flags); + } } @Override @@ -2286,6 +2301,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener selEnd = in.readInt(); frozenWithFocus = (in.readInt() != 0); text = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); + + if (in.readInt() != 0) { + error = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); + } } } @@ -2338,6 +2357,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener ss.frozenWithFocus = true; } + ss.error = mError; + return ss; } @@ -2383,6 +2404,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } } + + if (ss.error != null) { + setError(ss.error); + } } /** @@ -2799,8 +2824,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener */ public void setInputType(int type) { setInputType(type, false); - final boolean isPassword = (type&(EditorInfo.TYPE_MASK_CLASS - |EditorInfo.TYPE_MASK_VARIATION)) + final int variation = type&(EditorInfo.TYPE_MASK_CLASS + |EditorInfo.TYPE_MASK_VARIATION); + final boolean isPassword = variation == (EditorInfo.TYPE_CLASS_TEXT |EditorInfo.TYPE_TEXT_VARIATION_PASSWORD); boolean forceUpdate = false; @@ -2809,8 +2835,14 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener setTypefaceByIndex(MONOSPACE, 0); } else if (mTransformation == PasswordTransformationMethod.getInstance()) { // We need to clean up if we were previously in password mode. - setTypefaceByIndex(-1, -1); + if (variation != (EditorInfo.TYPE_CLASS_TEXT + |EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD)) { + setTypefaceByIndex(-1, -1); + } forceUpdate = true; + } else if (variation == (EditorInfo.TYPE_CLASS_TEXT + |EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD)) { + setTypefaceByIndex(MONOSPACE, 0); } boolean multiLine = (type&(EditorInfo.TYPE_MASK_CLASS @@ -2999,23 +3031,28 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } } - - if (actionCode == EditorInfo.IME_ACTION_NEXT && - (ict != null || !shouldAdvanceFocusOnEnter())) { - // This is the default handling for the NEXT action, to advance - // focus. Note that for backwards compatibility we don't do this + if (ict != null || !shouldAdvanceFocusOnEnter()) { + // This is the handling for some default action. + // Note that for backwards compatibility we don't do this // default handling if explicit ime options have not been given, - // and we do not advance by default on an enter key -- in that - // case, we want to turn this into the normal enter key codes that - // an app may be expecting. - View v = focusSearch(FOCUS_DOWN); - if (v != null) { - if (!v.requestFocus(FOCUS_DOWN)) { - throw new IllegalStateException("focus search returned a view " + - "that wasn't able to take focus!"); + // to instead turn this into the normal enter key codes that an + // app may be expecting. + if (actionCode == EditorInfo.IME_ACTION_NEXT) { + View v = focusSearch(FOCUS_DOWN); + if (v != null) { + if (!v.requestFocus(FOCUS_DOWN)) { + throw new IllegalStateException("focus search returned a view " + + "that wasn't able to take focus!"); + } + } + return; + + } else if (actionCode == EditorInfo.IME_ACTION_DONE) { + InputMethodManager imm = InputMethodManager.peekInstance(); + if (imm != null) { + imm.hideSoftInputFromWindow(getWindowToken(), 0); } } - return; } Handler h = getHandler(); @@ -3998,7 +4035,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * but also in mail addresses and subjects which will display on multiple * lines but where it doesn't make sense to insert newlines. */ - protected boolean shouldAdvanceFocusOnEnter() { + private boolean shouldAdvanceFocusOnEnter() { if (mInput == null) { return false; } @@ -4192,6 +4229,14 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener */ super.onKeyUp(keyCode, event); return true; + } else if ((event.getFlags() + & KeyEvent.FLAG_SOFT_KEYBOARD) != 0) { + // No target for next focus, but make sure the IME + // if this came from it. + InputMethodManager imm = InputMethodManager.peekInstance(); + if (imm != null) { + imm.hideSoftInputFromWindow(getWindowToken(), 0); + } } } @@ -4234,9 +4279,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener // An action has not been set, but the enter key will move to // the next focus, so set the action to that. outAttrs.imeOptions = EditorInfo.IME_ACTION_NEXT; - if (!shouldAdvanceFocusOnEnter()) { - outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_ENTER_ACTION; - } + } else { + // An action has not been set, and there is no focus to move + // to, so let's just supply a "done" action. + outAttrs.imeOptions = EditorInfo.IME_ACTION_DONE; + } + if (!shouldAdvanceFocusOnEnter()) { + outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_ENTER_ACTION; } } outAttrs.hintText = mHint; @@ -5977,6 +6026,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (mSelectAllOnFocus) { Selection.setSelection((Spannable) mText, 0, mText.length()); + mTouchFocusSelectedAll = true; } if (selMoved && selStart >= 0 && selEnd >= 0) { @@ -6078,12 +6128,32 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } + class CommitSelectionReceiver extends ResultReceiver { + int mNewStart; + int mNewEnd; + + CommitSelectionReceiver() { + super(getHandler()); + } + + protected void onReceiveResult(int resultCode, Bundle resultData) { + if (resultCode != InputMethodManager.RESULT_SHOWN) { + Selection.setSelection((Spannable)mText, mNewStart, mNewEnd); + } + } + } + @Override public boolean onTouchEvent(MotionEvent event) { - final boolean superResult = super.onTouchEvent(event); - final int action = event.getAction(); + if (action == MotionEvent.ACTION_DOWN) { + // Reset this state; it will be re-set if super.onTouchEvent + // causes focus to move to the view. + mTouchFocusSelectedAll = false; + } + final boolean superResult = super.onTouchEvent(event); + /* * Don't handle the release after a long press, because it will * move the selection away from whatever the menu action was @@ -6100,17 +6170,44 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener mScrolled = false; } - boolean moved = mMovement.onTouchEvent(this, (Spannable) mText, event); + boolean handled = false; + + int oldSelStart = Selection.getSelectionStart(mText); + int oldSelEnd = Selection.getSelectionEnd(mText); + + handled |= mMovement.onTouchEvent(this, (Spannable) mText, event); if (mText instanceof Editable && onCheckIsTextEditor()) { if (action == MotionEvent.ACTION_UP && isFocused() && !mScrolled) { InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); - imm.showSoftInput(this, 0); + + // This is going to be gross... if tapping on the text view + // causes the IME to be displayed, we don't want the selection + // to change. But the selection has already changed, and + // we won't know right away whether the IME is getting + // displayed, so... + + int newSelStart = Selection.getSelectionStart(mText); + int newSelEnd = Selection.getSelectionEnd(mText); + CommitSelectionReceiver csr = null; + if (newSelStart != oldSelStart || newSelEnd != oldSelEnd) { + csr = new CommitSelectionReceiver(); + csr.mNewStart = newSelStart; + csr.mNewEnd = newSelEnd; + } + + if (imm.showSoftInput(this, 0, csr) && csr != null) { + // The IME might get shown -- revert to the old + // selection, and change to the new when we finally + // find out of it is okay. + Selection.setSelection((Spannable)mText, oldSelStart, oldSelEnd); + handled = true; + } } } - if (moved) { + if (handled) { return true; } } @@ -6118,6 +6215,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return superResult; } + /** + * Returns true, only while processing a touch gesture, if the initial + * touch down event caused focus to move to the text view and as a result + * it selected all of its text. + */ + public boolean didTouchFocusSelectAll() { + return mTouchFocusSelectedAll; + } + @Override public void cancelLongPress() { super.cancelLongPress(); diff --git a/core/java/android/widget/ZoomRing.java b/core/java/android/widget/ZoomRing.java index a5a867b..83a1225 100644 --- a/core/java/android/widget/ZoomRing.java +++ b/core/java/android/widget/ZoomRing.java @@ -1,9 +1,26 @@ +/* + * 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. + */ + package android.widget; import com.android.internal.R; import android.content.Context; import android.content.res.Resources; +import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.graphics.drawable.RotateDrawable; @@ -18,36 +35,47 @@ import android.view.View; import android.view.ViewConfiguration; /** + * A view that has a draggable thumb on a circle. + * * @hide */ public class ZoomRing extends View { - - // TODO: move to ViewConfiguration? - static final int DOUBLE_TAP_DISMISS_TIMEOUT = ViewConfiguration.getDoubleTapTimeout(); - // TODO: get from theme private static final String TAG = "ZoomRing"; // TODO: Temporary until the trail is done private static final boolean DRAW_TRAIL = false; - // TODO: xml - private static final int THUMB_DISTANCE = 63; - - /** To avoid floating point calculations, we multiply radians by this value. */ + /** + * To avoid floating point calculations and int round-offs, we multiply + * radians by this value. + */ public static final int RADIAN_INT_MULTIPLIER = 10000; + /** The allowable margin of error when comparing two angles. */ public static final int RADIAN_INT_ERROR = 100; - /** PI using our multiplier. */ public static final int PI_INT_MULTIPLIED = (int) (Math.PI * RADIAN_INT_MULTIPLIER); public static final int TWO_PI_INT_MULTIPLIED = PI_INT_MULTIPLIED * 2; - /** PI/2 using our multiplier. */ private static final int HALF_PI_INT_MULTIPLIED = PI_INT_MULTIPLIED / 2; - private int mZeroAngle = HALF_PI_INT_MULTIPLIED * 3; - + private static final int DOUBLE_TAP_DISMISS_TIMEOUT = ViewConfiguration.getDoubleTapTimeout(); + private final int mTouchSlop; + + /** The slop when the user is grabbing the thumb. */ private static final int THUMB_GRAB_SLOP = PI_INT_MULTIPLIED / 8; + /** The slop until a user starts dragging the thumb. */ private static final int THUMB_DRAG_SLOP = PI_INT_MULTIPLIED / 12; + /** The distance (in px) from the center of the ring to the center of the thumb. */ + private int mThumbDistance; + + /** The angle on a unit circle that is considered to be the zoom ring's 0 degree. */ + private int mZeroAngle = HALF_PI_INT_MULTIPLIED * 3; + /** + * The maximum delta angle that the thumb can move. The primary use is to + * ensure that when a user taps on the ring, the movement to reach that + * target angle is not ambiguous (for example, if the thumb is at 0 and he + * taps 180, should the thumb go clockwise or counterclockwise? + * <p> * Includes error because we compare this to the result of * getDelta(getClosestTickeAngle(..), oldAngle) which ends up having some * rounding error. @@ -55,58 +83,93 @@ public class ZoomRing extends View { private static final int MAX_ABS_JUMP_DELTA_ANGLE = (2 * PI_INT_MULTIPLIED / 3) + RADIAN_INT_ERROR; - /** The cached X of our center. */ + /** The cached X of the zoom ring's center (in zoom ring coordinates). */ private int mCenterX; - /** The cached Y of our center. */ + /** The cached Y of the zoom ring's center (in zoom ring coordinates). */ private int mCenterY; /** The angle of the thumb (in int radians) */ private int mThumbAngle; + /** The cached width/2 of the zoom ring. */ private int mThumbHalfWidth; + /** The cached height/2 of the zoom ring. */ private int mThumbHalfHeight; + /** + * The bound for the thumb's movement when it is being dragged clockwise. + * Can be Integer.MIN_VALUE if there is no bound in this direction. + */ private int mThumbCwBound = Integer.MIN_VALUE; + /** + * The bound for the thumb's movement when it is being dragged + * counterclockwise. Can be Integer.MIN_VALUE if there is no bound in this + * direction. + */ private int mThumbCcwBound = Integer.MIN_VALUE; + + /** + * Whether to enforce the maximum absolute jump delta. See + * {@link #MAX_ABS_JUMP_DELTA_ANGLE}. + */ private boolean mEnforceMaxAbsJump = true; /** The inner radius of the track. */ - private int mBoundInnerRadiusSquared = 0; + private int mTrackInnerRadius; + /** Cached square of the inner radius of the track. */ + private int mTrackInnerRadiusSquared; /** The outer radius of the track. */ - private int mBoundOuterRadiusSquared = Integer.MAX_VALUE; + private int mTrackOuterRadius; + /** Cached square of the outer radius of the track. */ + private int mTrackOuterRadiusSquared; + /** The raw X of where the widget previously was located. */ private int mPreviousWidgetDragX; + /** The raw Y of where the widget previously was located. */ private int mPreviousWidgetDragY; + /** Whether the thumb should be visible. */ private boolean mThumbVisible = true; + + /** The drawable for the thumb. */ private Drawable mThumbDrawable; /** Shown beneath the thumb if we can still zoom in. */ - private Drawable mThumbPlusArrowDrawable; + private Drawable mZoomInArrowDrawable; /** Shown beneath the thumb if we can still zoom out. */ - private Drawable mThumbMinusArrowDrawable; + private Drawable mZoomOutArrowDrawable; + + /** @see #mThumbArrowsToDraw */ private static final int THUMB_ARROW_PLUS = 1 << 0; + /** @see #mThumbArrowsToDraw */ private static final int THUMB_ARROW_MINUS = 1 << 1; /** Bitwise-OR of {@link #THUMB_ARROW_MINUS} and {@link #THUMB_ARROW_PLUS} */ private int mThumbArrowsToDraw; + + /** The duration for the thumb arrows fading out */ private static final int THUMB_ARROWS_FADE_DURATION = 300; + /** The time when the fade out started. */ private long mThumbArrowsFadeStartTime; + /** The current alpha for the thumb arrows. */ private int mThumbArrowsAlpha = 255; - private static final int THUMB_PLUS_MINUS_DISTANCE = 69; - private static final int THUMB_PLUS_MINUS_OFFSET_ANGLE = TWO_PI_INT_MULTIPLIED / 11; + /** The distance from the center to the zoom arrow hints (usually plus and minus). */ + private int mZoomArrowHintDistance; + /** The offset angle from the thumb angle to draw the zoom arrow hints. */ + private int mZoomArrowHintOffsetAngle = TWO_PI_INT_MULTIPLIED / 11; /** Drawn (without rotation) on top of the arrow. */ - private Drawable mThumbPlusDrawable; + private Drawable mZoomInArrowHintDrawable; /** Drawn (without rotation) on top of the arrow. */ - private Drawable mThumbMinusDrawable; + private Drawable mZoomOutArrowHintDrawable; + /** Zoom ring is just chillin' */ private static final int MODE_IDLE = 0; - /** * User has his finger down somewhere on the ring (besides the thumb) and we * are waiting for him to move the slop amount before considering him in the * drag thumb state. */ private static final int MODE_WAITING_FOR_DRAG_THUMB_AFTER_JUMP = 5; + /** User is dragging the thumb. */ private static final int MODE_DRAG_THUMB = 1; /** * User has his finger down, but we are waiting for him to pass the touch @@ -114,51 +177,65 @@ public class ZoomRing extends View { * show the movable hint. */ private static final int MODE_WAITING_FOR_MOVE_ZOOM_RING = 4; + /** User is moving the zoom ring. */ private static final int MODE_MOVE_ZOOM_RING = 2; + /** User is dragging the thumb via tap-drag. */ private static final int MODE_TAP_DRAG = 3; /** Ignore the touch interaction until the user touches the thumb again. */ private static final int MODE_IGNORE_UNTIL_TOUCHES_THUMB = 6; + /** The current mode of interaction. */ private int mMode; - /** Records the last mode the user was in. */ private int mPreviousMode; - + + /** The previous time of the up-touch on the center. */ private long mPreviousCenterUpTime; + /** The previous X of down-touch. */ private int mPreviousDownX; + /** The previous Y of down-touch. */ private int mPreviousDownY; - private int mWaitingForDragThumbDownAngle; + /** The angle where the user first grabbed the thumb. */ + private int mInitialGrabThumbAngle; + /** The callback. */ private OnZoomRingCallback mCallback; - private int mPreviousCallbackAngle; - private int mCallbackThreshold = Integer.MAX_VALUE; + /** The tick angle that we previously called back with. */ + private int mPreviousCallbackTickAngle; + /** The delta angle between ticks. A tick is a callback point. */ + private int mTickDelta = Integer.MAX_VALUE; /** If the user drags to within __% of a tick, snap to that tick. */ - private int mFuzzyCallbackThreshold = Integer.MAX_VALUE; + private int mFuzzyTickDelta = Integer.MAX_VALUE; - private boolean mResetThumbAutomatically = true; + /** The angle where the thumb is officially starting to be dragged. */ private int mThumbDragStartAngle; - private final int mTouchSlop; - + /** The drawable for the zoom trail. */ private Drawable mTrail; + /** The accumulated angle for the trail. */ private double mAcculumalatedTrailAngle; + /** The animation-step tracker for scrolling the thumb to a particular position. */ private Scroller mThumbScroller; + /** Whether to ever vibrate when passing a tick. */ private boolean mVibration = true; - private static final int MSG_THUMB_SCROLLER_TICK = 1; - private static final int MSG_THUMB_ARROWS_FADE_TICK = 2; + /** The drawable used to hint that this can pan its owner. */ + private Drawable mPanningArrowsDrawable; + + private static final int MSG_THUMB_SCROLLER_STEP = 1; + private static final int MSG_THUMB_ARROWS_FADE_STEP = 2; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { - case MSG_THUMB_SCROLLER_TICK: - onThumbScrollerTick(); + case MSG_THUMB_SCROLLER_STEP: + onThumbScrollerStep(); break; - case MSG_THUMB_ARROWS_FADE_TICK: - onThumbArrowsFadeTick(); + case MSG_THUMB_ARROWS_FADE_STEP: + onThumbArrowsFadeStep(); break; } } @@ -170,50 +247,64 @@ public class ZoomRing extends View { ViewConfiguration viewConfiguration = ViewConfiguration.get(context); mTouchSlop = viewConfiguration.getScaledTouchSlop(); - // TODO get drawables from style instead + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ZoomRing, defStyle, 0); + mThumbDistance = (int) a.getDimension(R.styleable.ZoomRing_thumbDistance, 0); + setTrackRadii( + (int) a.getDimension(R.styleable.ZoomRing_trackInnerRadius, 0), + (int) a.getDimension(R.styleable.ZoomRing_trackOuterRadius, Integer.MAX_VALUE)); + mThumbDrawable = a.getDrawable(R.styleable.ZoomRing_thumbDrawable); + mZoomInArrowDrawable = a.getDrawable(R.styleable.ZoomRing_zoomInArrowDrawable); + mZoomOutArrowDrawable = a.getDrawable(R.styleable.ZoomRing_zoomOutArrowDrawable); + mZoomInArrowHintDrawable = a.getDrawable(R.styleable.ZoomRing_zoomInArrowHintDrawable); + mZoomOutArrowHintDrawable = a.getDrawable(R.styleable.ZoomRing_zoomOutArrowHintDrawable); + mZoomArrowHintDistance = + (int) a.getDimension(R.styleable.ZoomRing_zoomArrowHintDistance, 0); + mZoomArrowHintOffsetAngle = + (int) (a.getInteger(R.styleable.ZoomRing_zoomArrowHintOffsetAngle, 0) + * TWO_PI_INT_MULTIPLIED / 360); + mPanningArrowsDrawable = a.getDrawable(R.styleable.ZoomRing_panningArrowsDrawable); + a.recycle(); + Resources res = context.getResources(); - mThumbDrawable = res.getDrawable(R.drawable.zoom_ring_thumb); - mThumbPlusArrowDrawable = res.getDrawable(R.drawable.zoom_ring_thumb_plus_arrow_rotatable). - mutate(); - mThumbMinusArrowDrawable = res.getDrawable(R.drawable.zoom_ring_thumb_minus_arrow_rotatable). - mutate(); - mThumbPlusDrawable = res.getDrawable(R.drawable.zoom_ring_thumb_plus); - mThumbMinusDrawable = res.getDrawable(R.drawable.zoom_ring_thumb_minus); if (DRAW_TRAIL) { + // TODO get drawables from style instead mTrail = res.getDrawable(R.drawable.zoom_ring_trail).mutate(); } - // TODO: add padding to drawable - setBackgroundResource(R.drawable.zoom_ring_track); - // TODO get from style - setRingBounds(43, Integer.MAX_VALUE); - mThumbHalfHeight = mThumbDrawable.getIntrinsicHeight() / 2; mThumbHalfWidth = mThumbDrawable.getIntrinsicWidth() / 2; - setCallbackThreshold(PI_INT_MULTIPLIED / 6); + setTickDelta(PI_INT_MULTIPLIED / 6); } public ZoomRing(Context context, AttributeSet attrs) { - this(context, attrs, 0); + this(context, attrs, com.android.internal.R.attr.zoomRingStyle); } public ZoomRing(Context context) { this(context, null); } + public void setTrackDrawable(Drawable drawable) { + setBackgroundDrawable(drawable); + } + public void setCallback(OnZoomRingCallback callback) { mCallback = callback; } - // TODO: rename - public void setCallbackThreshold(int callbackThreshold) { - mCallbackThreshold = callbackThreshold; - mFuzzyCallbackThreshold = (int) (callbackThreshold * 0.65f); + /** + * Sets the distance between ticks. This will be used as a callback threshold. + * + * @param angle The angle between ticks. + */ + public void setTickDelta(int angle) { + mTickDelta = angle; + mFuzzyTickDelta = (int) (angle * 0.65f); } - public void setVibration(boolean vibrate) { - mVibration = vibrate; + public void setVibration(boolean vibration) { + mVibration = vibration; } public void setThumbVisible(boolean thumbVisible) { @@ -223,28 +314,42 @@ public class ZoomRing extends View { } } - // TODO: from XML too - public void setRingBounds(int innerRadius, int outerRadius) { - mBoundInnerRadiusSquared = innerRadius * innerRadius; - if (mBoundInnerRadiusSquared < innerRadius) { + public Drawable getPanningArrowsDrawable() { + return mPanningArrowsDrawable; + } + + public void setTrackRadii(int innerRadius, int outerRadius) { + mTrackInnerRadius = innerRadius; + mTrackOuterRadius = outerRadius; + + mTrackInnerRadiusSquared = innerRadius * innerRadius; + if (mTrackInnerRadiusSquared < innerRadius) { // Prevent overflow - mBoundInnerRadiusSquared = Integer.MAX_VALUE; + mTrackInnerRadiusSquared = Integer.MAX_VALUE; } - mBoundOuterRadiusSquared = outerRadius * outerRadius; - if (mBoundOuterRadiusSquared < outerRadius) { + mTrackOuterRadiusSquared = outerRadius * outerRadius; + if (mTrackOuterRadiusSquared < outerRadius) { // Prevent overflow - mBoundOuterRadiusSquared = Integer.MAX_VALUE; + mTrackOuterRadiusSquared = Integer.MAX_VALUE; } } + public int getTrackInnerRadius() { + return mTrackInnerRadius; + } + + public int getTrackOuterRadius() { + return mTrackOuterRadius; + } + public void setThumbClockwiseBound(int angle) { if (angle < 0) { mThumbCwBound = Integer.MIN_VALUE; } else { mThumbCwBound = getClosestTickAngle(angle); } - setEnforceMaxAbsJump(); + updateEnforceMaxAbsJump(); } public void setThumbCounterclockwiseBound(int angle) { @@ -253,14 +358,14 @@ public class ZoomRing extends View { } else { mThumbCcwBound = getClosestTickAngle(angle); } - setEnforceMaxAbsJump(); + updateEnforceMaxAbsJump(); } - private void setEnforceMaxAbsJump() { + private void updateEnforceMaxAbsJump() { // If there are bounds in both direction, there is no reason to restrict // the amount that a user can absolute jump to mEnforceMaxAbsJump = - mThumbCcwBound == Integer.MIN_VALUE || mThumbCwBound == Integer.MIN_VALUE; + mThumbCcwBound == Integer.MIN_VALUE || mThumbCwBound == Integer.MIN_VALUE; } public int getThumbAngle() { @@ -269,7 +374,7 @@ public class ZoomRing extends View { public void setThumbAngle(int angle) { angle = getValidAngle(angle); - mPreviousCallbackAngle = getClosestTickAngle(angle); + mPreviousCallbackTickAngle = getClosestTickAngle(angle); setThumbAngleAuto(angle, false, false); } @@ -299,9 +404,9 @@ public class ZoomRing extends View { mThumbAngle = angle; int unoffsetAngle = angle + mZeroAngle; int thumbCenterX = (int) (Math.cos(1f * unoffsetAngle / RADIAN_INT_MULTIPLIER) * - THUMB_DISTANCE) + mCenterX; + mThumbDistance) + mCenterX; int thumbCenterY = (int) (Math.sin(1f * unoffsetAngle / RADIAN_INT_MULTIPLIER) * - THUMB_DISTANCE) * -1 + mCenterY; + mThumbDistance) * -1 + mCenterY; mThumbDrawable.setBounds(thumbCenterX - mThumbHalfWidth, thumbCenterY - mThumbHalfHeight, @@ -356,7 +461,7 @@ public class ZoomRing extends View { duration = getAnimationDuration(deltaAngle); } mThumbScroller.startScroll(startAngle, 0, deltaAngle, 0, duration); - onThumbScrollerTick(); + onThumbScrollerStep(); } private int getAnimationDuration(int deltaAngle) { @@ -364,10 +469,10 @@ public class ZoomRing extends View { return 300 + deltaAngle * 300 / RADIAN_INT_MULTIPLIER; } - private void onThumbScrollerTick() { + private void onThumbScrollerStep() { if (!mThumbScroller.computeScrollOffset()) return; setThumbAngleInt(getThumbScrollerAngle()); - mHandler.sendEmptyMessage(MSG_THUMB_SCROLLER_TICK); + mHandler.sendEmptyMessage(MSG_THUMB_SCROLLER_STEP); } private int getThumbScrollerAngle() { @@ -375,16 +480,10 @@ public class ZoomRing extends View { } public void resetThumbAngle() { - if (mResetThumbAutomatically) { - mPreviousCallbackAngle = 0; - setThumbAngleInt(0); - } + mPreviousCallbackTickAngle = 0; + setThumbAngleInt(0); } - public void setResetThumbAutomatically(boolean resetThumbAutomatically) { - mResetThumbAutomatically = resetThumbAutomatically; - } - @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(resolveSize(getSuggestedMinimumWidth(), widthMeasureSpec), @@ -411,14 +510,12 @@ public class ZoomRing extends View { } // These drawables are the same size as the track - mThumbPlusArrowDrawable.setBounds(0, 0, right - left, bottom - top); - mThumbMinusArrowDrawable.setBounds(0, 0, right - left, bottom - top); + mZoomInArrowDrawable.setBounds(0, 0, right - left, bottom - top); + mZoomOutArrowDrawable.setBounds(0, 0, right - left, bottom - top); } @Override public boolean onTouchEvent(MotionEvent event) { -// Log.d(TAG, "History size: " + event.getHistorySize()); - return handleTouch(event.getAction(), event.getEventTime(), (int) event.getX(), (int) event.getY(), (int) event.getRawX(), (int) event.getRawY()); @@ -457,15 +554,10 @@ public class ZoomRing extends View { boolean isTouchingRing = mThumbVisible; int touchAngle = getAngle(localX, localY); -// printAngle("touchAngle", touchAngle); -// printAngle("mThumbAngle", mThumbAngle); -// printAngle("mPreviousCallbackAngle", mPreviousCallbackAngle); -// Log.d(TAG, ""); - int radiusSquared = localX * localX + localY * localY; - if (radiusSquared < mBoundInnerRadiusSquared || - radiusSquared > mBoundOuterRadiusSquared) { + if (radiusSquared < mTrackInnerRadiusSquared || + radiusSquared > mTrackOuterRadiusSquared) { // Out-of-bounds isTouchingThumb = false; isTouchingRing = false; @@ -486,7 +578,7 @@ public class ZoomRing extends View { if (!isTouchingRing && (time - mPreviousCenterUpTime <= DOUBLE_TAP_DISMISS_TIMEOUT)) { // Make sure the double-tap is in the center of the widget (and not on the ring) - mCallback.onZoomRingDismissed(true); + mCallback.onZoomRingDismissed(); onTouchUp(time, isTouchingRing); // Dismissing, so halt here @@ -557,7 +649,7 @@ public class ZoomRing extends View { } setMode(MODE_WAITING_FOR_DRAG_THUMB_AFTER_JUMP); - mWaitingForDragThumbDownAngle = touchAngle; + mInitialGrabThumbAngle = touchAngle; boolean ccw = deltaThumbAndTick > 0; setThumbAngleAnimated(tickAngle, 0, ccw); @@ -577,9 +669,9 @@ public class ZoomRing extends View { } } else if (mMode == MODE_WAITING_FOR_DRAG_THUMB_AFTER_JUMP) { - int deltaDownAngle = getDelta(mWaitingForDragThumbDownAngle, touchAngle); + int deltaDownAngle = getDelta(mInitialGrabThumbAngle, touchAngle); if ((deltaDownAngle < -THUMB_DRAG_SLOP || deltaDownAngle > THUMB_DRAG_SLOP) && - isDeltaInBounds(mWaitingForDragThumbDownAngle, deltaDownAngle)) { + isDeltaInBounds(mInitialGrabThumbAngle, deltaDownAngle)) { setMode(MODE_DRAG_THUMB); // No need to call onThumbDragStarted, since that was done when they tapped-to-jump @@ -591,6 +683,8 @@ public class ZoomRing extends View { /* Make sure the user has moved the slop amount before going into that mode. */ setMode(MODE_MOVE_ZOOM_RING); mCallback.onZoomRingMovingStarted(); + // Move the zoom ring so it is under the finger where the user first touched + mCallback.onZoomRingMoved(x - mPreviousDownX, y - mPreviousDownY, rawX, rawY); } } else if (mMode == MODE_IGNORE_UNTIL_TOUCHES_THUMB) { if (isTouchingThumb) { @@ -629,7 +723,7 @@ public class ZoomRing extends View { if (mode == MODE_DRAG_THUMB || mode == MODE_TAP_DRAG) { // Animate back to a tick - setThumbAngleAnimated(mPreviousCallbackAngle, 0); + setThumbAngleAnimated(mPreviousCallbackTickAngle, 0); } } mCallback.onUserInteractionStopped(); @@ -741,9 +835,9 @@ public class ZoomRing extends View { boolean animateThumbToNewAngle = false; int totalDeltaAngle; - totalDeltaAngle = getDelta(mPreviousCallbackAngle, touchAngle, useDirection, ccw); - if (totalDeltaAngle >= mFuzzyCallbackThreshold - || totalDeltaAngle <= -mFuzzyCallbackThreshold) { + totalDeltaAngle = getDelta(mPreviousCallbackTickAngle, touchAngle, useDirection, ccw); + if (totalDeltaAngle >= mFuzzyTickDelta + || totalDeltaAngle <= -mFuzzyTickDelta) { if (!useDirection) { // Set ccw to match the direction found by getDelta @@ -763,9 +857,9 @@ public class ZoomRing extends View { if (ccw && mThumbCcwBound != Integer.MIN_VALUE) { int deltaCcwBoundAndTouch = getDelta(mThumbCcwBound, touchAngle, useDirection, true); - if (deltaCcwBoundAndTouch >= mCallbackThreshold / 2) { + if (deltaCcwBoundAndTouch >= mTickDelta / 2) { // The touch has past a bound - int deltaPreviousCbAndTouch = getDelta(mPreviousCallbackAngle, + int deltaPreviousCbAndTouch = getDelta(mPreviousCallbackTickAngle, touchAngle, useDirection, true); if (deltaPreviousCbAndTouch >= deltaCcwBoundAndTouch) { // The bound is between the previous callback angle and the touch @@ -778,8 +872,8 @@ public class ZoomRing extends View { // See block above for general comments int deltaCwBoundAndTouch = getDelta(mThumbCwBound, touchAngle, useDirection, false); - if (deltaCwBoundAndTouch <= -mCallbackThreshold / 2) { - int deltaPreviousCbAndTouch = getDelta(mPreviousCallbackAngle, + if (deltaCwBoundAndTouch <= -mTickDelta / 2) { + int deltaPreviousCbAndTouch = getDelta(mPreviousCallbackTickAngle, touchAngle, useDirection, false); /* * Both of these will be negative since we got delta in @@ -795,7 +889,7 @@ public class ZoomRing extends View { } if (touchAngle != oldTouchAngle) { // We bounded the touch angle - totalDeltaAngle = getDelta(mPreviousCallbackAngle, touchAngle, useDirection, ccw); + totalDeltaAngle = getDelta(mPreviousCallbackTickAngle, touchAngle, useDirection, ccw); animateThumbToNewAngle = true; setMode(MODE_IGNORE_UNTIL_TOUCHES_THUMB); } @@ -819,7 +913,7 @@ public class ZoomRing extends View { * hit. If we do int division, we'll end up with one level lower * than the one he was going for. */ - int deltaLevels = Math.round((float) totalDeltaAngle / mCallbackThreshold); + int deltaLevels = Math.round((float) totalDeltaAngle / mTickDelta); if (deltaLevels != 0) { boolean canStillZoom = mCallback.onZoomRingThumbDragged( deltaLevels, mThumbDragStartAngle, touchAngle); @@ -833,8 +927,8 @@ public class ZoomRing extends View { } // Set the callback angle to the actual angle based on how many delta levels we gave - mPreviousCallbackAngle = getValidAngle( - mPreviousCallbackAngle + (deltaLevels * mCallbackThreshold)); + mPreviousCallbackTickAngle = getValidAngle( + mPreviousCallbackTickAngle + (deltaLevels * mTickDelta)); } } @@ -993,14 +1087,14 @@ public class ZoomRing extends View { } private int getClosestTickAngle(int angle) { - int smallerAngleDistance = angle % mCallbackThreshold; + int smallerAngleDistance = angle % mTickDelta; int smallerAngle = angle - smallerAngleDistance; - if (smallerAngleDistance < mCallbackThreshold / 2) { + if (smallerAngleDistance < mTickDelta / 2) { // Closer to the smaller angle return smallerAngle; } else { // Closer to the bigger angle (premodding) - return (smallerAngle + mCallbackThreshold) % TWO_PI_INT_MULTIPLIED; + return (smallerAngle + mTickDelta) % TWO_PI_INT_MULTIPLIED; } } @@ -1025,7 +1119,7 @@ public class ZoomRing extends View { super.onWindowFocusChanged(hasWindowFocus); if (!hasWindowFocus) { - mCallback.onZoomRingDismissed(true); + mCallback.onZoomRingDismissed(); } } @@ -1054,12 +1148,12 @@ public class ZoomRing extends View { mTrail.draw(canvas); } if ((mThumbArrowsToDraw & THUMB_ARROW_PLUS) != 0) { - mThumbPlusArrowDrawable.draw(canvas); - mThumbPlusDrawable.draw(canvas); + mZoomInArrowDrawable.draw(canvas); + mZoomInArrowHintDrawable.draw(canvas); } if ((mThumbArrowsToDraw & THUMB_ARROW_MINUS) != 0) { - mThumbMinusArrowDrawable.draw(canvas); - mThumbMinusDrawable.draw(canvas); + mZoomOutArrowDrawable.draw(canvas); + mZoomOutArrowHintDrawable.draw(canvas); } mThumbDrawable.draw(canvas); } @@ -1067,48 +1161,48 @@ public class ZoomRing extends View { private void setThumbArrowsAngle(int angle) { int level = -angle * 10000 / ZoomRing.TWO_PI_INT_MULTIPLIED; - mThumbPlusArrowDrawable.setLevel(level); - mThumbMinusArrowDrawable.setLevel(level); + mZoomInArrowDrawable.setLevel(level); + mZoomOutArrowDrawable.setLevel(level); // Assume it is a square - int halfSideLength = mThumbPlusDrawable.getIntrinsicHeight() / 2; + int halfSideLength = mZoomInArrowHintDrawable.getIntrinsicHeight() / 2; int unoffsetAngle = angle + mZeroAngle; - int plusCenterX = (int) (Math.cos(1f * (unoffsetAngle - THUMB_PLUS_MINUS_OFFSET_ANGLE) - / RADIAN_INT_MULTIPLIER) * THUMB_PLUS_MINUS_DISTANCE) + mCenterX; - int plusCenterY = (int) (Math.sin(1f * (unoffsetAngle - THUMB_PLUS_MINUS_OFFSET_ANGLE) - / RADIAN_INT_MULTIPLIER) * THUMB_PLUS_MINUS_DISTANCE) * -1 + mCenterY; - mThumbPlusDrawable.setBounds(plusCenterX - halfSideLength, + int plusCenterX = (int) (Math.cos(1f * (unoffsetAngle - mZoomArrowHintOffsetAngle) + / RADIAN_INT_MULTIPLIER) * mZoomArrowHintDistance) + mCenterX; + int plusCenterY = (int) (Math.sin(1f * (unoffsetAngle - mZoomArrowHintOffsetAngle) + / RADIAN_INT_MULTIPLIER) * mZoomArrowHintDistance) * -1 + mCenterY; + mZoomInArrowHintDrawable.setBounds(plusCenterX - halfSideLength, plusCenterY - halfSideLength, plusCenterX + halfSideLength, plusCenterY + halfSideLength); - int minusCenterX = (int) (Math.cos(1f * (unoffsetAngle + THUMB_PLUS_MINUS_OFFSET_ANGLE) - / RADIAN_INT_MULTIPLIER) * THUMB_PLUS_MINUS_DISTANCE) + mCenterX; - int minusCenterY = (int) (Math.sin(1f * (unoffsetAngle + THUMB_PLUS_MINUS_OFFSET_ANGLE) - / RADIAN_INT_MULTIPLIER) * THUMB_PLUS_MINUS_DISTANCE) * -1 + mCenterY; - mThumbMinusDrawable.setBounds(minusCenterX - halfSideLength, + int minusCenterX = (int) (Math.cos(1f * (unoffsetAngle + mZoomArrowHintOffsetAngle) + / RADIAN_INT_MULTIPLIER) * mZoomArrowHintDistance) + mCenterX; + int minusCenterY = (int) (Math.sin(1f * (unoffsetAngle + mZoomArrowHintOffsetAngle) + / RADIAN_INT_MULTIPLIER) * mZoomArrowHintDistance) * -1 + mCenterY; + mZoomOutArrowHintDrawable.setBounds(minusCenterX - halfSideLength, minusCenterY - halfSideLength, minusCenterX + halfSideLength, minusCenterY + halfSideLength); } - public void setThumbArrowsVisible(boolean visible) { + void setThumbArrowsVisible(boolean visible) { if (visible) { mThumbArrowsAlpha = 255; - int callbackAngle = mPreviousCallbackAngle; + int callbackAngle = mPreviousCallbackTickAngle; if (callbackAngle < mThumbCwBound - RADIAN_INT_ERROR || callbackAngle > mThumbCwBound + RADIAN_INT_ERROR) { - mThumbPlusArrowDrawable.setAlpha(255); - mThumbPlusDrawable.setAlpha(255); + mZoomInArrowDrawable.setAlpha(255); + mZoomInArrowHintDrawable.setAlpha(255); mThumbArrowsToDraw |= THUMB_ARROW_PLUS; } else { mThumbArrowsToDraw &= ~THUMB_ARROW_PLUS; } if (callbackAngle < mThumbCcwBound - RADIAN_INT_ERROR || callbackAngle > mThumbCcwBound + RADIAN_INT_ERROR) { - mThumbMinusArrowDrawable.setAlpha(255); - mThumbMinusDrawable.setAlpha(255); + mZoomOutArrowDrawable.setAlpha(255); + mZoomOutArrowHintDrawable.setAlpha(255); mThumbArrowsToDraw |= THUMB_ARROW_MINUS; } else { mThumbArrowsToDraw &= ~THUMB_ARROW_MINUS; @@ -1117,11 +1211,11 @@ public class ZoomRing extends View { } else if (mThumbArrowsAlpha == 255) { // Only start fade if we're fully visible (otherwise another fade is happening already) mThumbArrowsFadeStartTime = SystemClock.elapsedRealtime(); - onThumbArrowsFadeTick(); + onThumbArrowsFadeStep(); } } - private void onThumbArrowsFadeTick() { + private void onThumbArrowsFadeStep() { if (mThumbArrowsAlpha <= 0) { mThumbArrowsToDraw = 0; return; @@ -1132,20 +1226,20 @@ public class ZoomRing extends View { / THUMB_ARROWS_FADE_DURATION)); if (mThumbArrowsAlpha < 0) mThumbArrowsAlpha = 0; if ((mThumbArrowsToDraw & THUMB_ARROW_PLUS) != 0) { - mThumbPlusArrowDrawable.setAlpha(mThumbArrowsAlpha); - mThumbPlusDrawable.setAlpha(mThumbArrowsAlpha); - invalidateDrawable(mThumbPlusDrawable); - invalidateDrawable(mThumbPlusArrowDrawable); + mZoomInArrowDrawable.setAlpha(mThumbArrowsAlpha); + mZoomInArrowHintDrawable.setAlpha(mThumbArrowsAlpha); + invalidateDrawable(mZoomInArrowHintDrawable); + invalidateDrawable(mZoomInArrowDrawable); } if ((mThumbArrowsToDraw & THUMB_ARROW_MINUS) != 0) { - mThumbMinusArrowDrawable.setAlpha(mThumbArrowsAlpha); - mThumbMinusDrawable.setAlpha(mThumbArrowsAlpha); - invalidateDrawable(mThumbMinusDrawable); - invalidateDrawable(mThumbMinusArrowDrawable); + mZoomOutArrowDrawable.setAlpha(mThumbArrowsAlpha); + mZoomOutArrowHintDrawable.setAlpha(mThumbArrowsAlpha); + invalidateDrawable(mZoomOutArrowHintDrawable); + invalidateDrawable(mZoomOutArrowDrawable); } - if (!mHandler.hasMessages(MSG_THUMB_ARROWS_FADE_TICK)) { - mHandler.sendEmptyMessage(MSG_THUMB_ARROWS_FADE_TICK); + if (!mHandler.hasMessages(MSG_THUMB_ARROWS_FADE_STEP)) { + mHandler.sendEmptyMessage(MSG_THUMB_ARROWS_FADE_STEP); } } @@ -1168,7 +1262,7 @@ public class ZoomRing extends View { boolean onZoomRingThumbDragged(int numLevels, int startAngle, int curAngle); void onZoomRingThumbDraggingStopped(); - void onZoomRingDismissed(boolean dismissImmediately); + void onZoomRingDismissed(); void onUserInteractionStarted(); void onUserInteractionStopped(); diff --git a/core/java/android/widget/ZoomRingController.java b/core/java/android/widget/ZoomRingController.java index 19f66a0..3bf3b22 100644 --- a/core/java/android/widget/ZoomRingController.java +++ b/core/java/android/widget/ZoomRingController.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008 The Android Open Source Project + * 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. @@ -30,7 +30,8 @@ import android.os.Handler; import android.os.Message; import android.os.SystemClock; import android.provider.Settings; -import android.util.Log; +import android.util.DisplayMetrics; +import android.view.GestureDetector; import android.view.Gravity; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -44,11 +45,9 @@ import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.view.animation.DecelerateInterpolator; -// TODO: make sure no px values exist, only dip (scale if necessary from Viewconfiguration) - /** - * TODO: Docs - * + * A controller to simplify the use of the zoom ring widget. + * <p> * If you are using this with a custom View, please call * {@link #setVisible(boolean) setVisible(false)} from the * {@link View#onDetachedFromWindow}. @@ -58,13 +57,7 @@ import android.view.animation.DecelerateInterpolator; public class ZoomRingController implements ZoomRing.OnZoomRingCallback, View.OnTouchListener, View.OnKeyListener { - private static final int ZOOM_RING_RADIUS_INSET = 24; - - private static final int ZOOM_RING_RECENTERING_DURATION = 500; - - private static final String TAG = "ZoomRing"; - - public static final boolean USE_OLD_ZOOM = false; + // Temporary methods for different zoom types static int getZoomType(Context context) { return Settings.System.getInt(context.getContentResolver(), "zoom", 1); } @@ -75,19 +68,43 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, return getZoomType(context) == 1; } - private static final int ZOOM_CONTROLS_TIMEOUT = - (int) ViewConfiguration.getZoomControlsTimeout(); + /** The duration for the animation to re-center the zoom ring. */ + private static final int RECENTERING_DURATION = 500; - // TODO: move these to ViewConfiguration or re-use existing ones - // TODO: scale px values based on latest from ViewConfiguration - private static final int SECOND_TAP_TIMEOUT = 500; - private static final int ZOOM_RING_DISMISS_DELAY = SECOND_TAP_TIMEOUT / 2; - // TODO: view config? at least scaled - private static final int MAX_PAN_GAP = 20; - private static final int MAX_INITIATE_PAN_GAP = 10; - // TODO view config + /** The inactivity timeout for the zoom ring. */ + private static final int INACTIVITY_TIMEOUT = + (int) ViewConfiguration.getZoomControlsTimeout(); + + /** + * The delay when the user taps outside to dismiss the zoom ring. This is + * because the user can do a second-tap to recenter the owner view instead + * of dismissing the zoom ring. + */ + private static final int OUTSIDE_TAP_DISMISS_DELAY = + ViewConfiguration.getDoubleTapTimeout() / 2; + + /** + * When the zoom ring is on the edge, this is the delay before we actually + * start panning the owner. + * @see #mInitiatePanGap + */ private static final int INITIATE_PAN_DELAY = 300; + /** + * While already panning, if the zoom ring remains this close to an edge, + * the owner will continue to be panned. + */ + private int mPanGap; + + /** To begin a pan, the zoom ring must be this close to an edge. */ + private int mInitiatePanGap; + + /** Initialized from ViewConfiguration. */ + private int mScaledTouchSlop; + + /** + * The setting name that tracks whether we've shown the zoom ring toast. + */ private static final String SETTING_NAME_SHOWN_TOAST = "shown_zoom_ring_toast"; private Context mContext; @@ -137,25 +154,37 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, * screen once (for the first tap down) instead of twice (for the first tap * down and then to grab the thumb). */ + /** The X where the tap-drag started. */ private int mTapDragStartX; + /** The Y where the tap-drag started. */ private int mTapDragStartY; + /** The controller is idle */ private static final int TOUCH_MODE_IDLE = 0; - private static final int TOUCH_MODE_WAITING_FOR_SECOND_TAP = 1; + /** + * In the middle of a second-tap interaction, waiting for either an up-touch + * or the user to start dragging to go into tap-drag mode. + */ private static final int TOUCH_MODE_WAITING_FOR_TAP_DRAG_MOVEMENT = 2; + /** In the middle of a tap-drag. */ private static final int TOUCH_MODE_FORWARDING_FOR_TAP_DRAG = 3; private int mTouchMode; + /** Whether the zoom ring is visible. */ private boolean mIsZoomRingVisible; private ZoomRing mZoomRing; + /** Cached width of the zoom ring. */ private int mZoomRingWidth; + /** Cached height of the zoom ring. */ private int mZoomRingHeight; /** Invokes panning of owner view if the zoom ring is touching an edge. */ private Panner mPanner; + /** The time when the zoom ring first touched the edge. */ private long mTouchingEdgeStartTime; - private boolean mPanningEnabledForThisInteraction; + /** Whether the user has already initiated the panning. */ + private boolean mPanningInitiated; /** * When the finger moves the zoom ring to an edge, this is the horizontal @@ -167,16 +196,21 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, /** Vertical accumulator, see {@link #mMovingZoomRingOobX} */ private int mMovingZoomRingOobY; + /** Arrows that hint that the zoom ring is movable. */ private ImageView mPanningArrows; + /** The animation shown when the panning arrows are being shown. */ private Animation mPanningArrowsEnterAnimation; + /** The animation shown when the panning arrows are being hidden. */ private Animation mPanningArrowsExitAnimation; + /** + * Temporary rectangle, only use from the UI thread (and ideally don't rely + * on it being unused across many method calls.) + */ private Rect mTempRect = new Rect(); private OnZoomListener mCallback; - private ViewConfiguration mViewConfig; - /** * When the zoom ring is centered on screen, this will be the x value used * for the container's layout params. @@ -217,6 +251,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, private IntentFilter mConfigurationChangedFilter = new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED); + /** Listens for configuration changes so we can make sure we're still in a reasonable state. */ private BroadcastReceiver mConfigurationChangedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -228,7 +263,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, }; /** Keeps the scroller going (or starts it). */ - private static final int MSG_SCROLLER_TICK = 1; + private static final int MSG_SCROLLER_STEP = 1; /** When configuration changes, this is called after the UI thread is idle. */ private static final int MSG_POST_CONFIGURATION_CHANGED = 2; /** Used to delay the zoom ring dismissal. */ @@ -244,8 +279,8 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, @Override public void handleMessage(Message msg) { switch (msg.what) { - case MSG_SCROLLER_TICK: - onScrollerTick(); + case MSG_SCROLLER_STEP: + onScrollerStep(); break; case MSG_POST_CONFIGURATION_CHANGED: @@ -296,8 +331,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, mContainerLayoutParams.width = LayoutParams.WRAP_CONTENT; mContainerLayoutParams.type = LayoutParams.TYPE_APPLICATION_PANEL; mContainerLayoutParams.format = PixelFormat.TRANSPARENT; - // TODO: make a new animation for this - mContainerLayoutParams.windowAnimations = com.android.internal.R.style.Animation_Dialog; + mContainerLayoutParams.windowAnimations = com.android.internal.R.style.Animation_ZoomRing; mContainer = new FrameLayout(context); mContainer.setLayoutParams(mContainerLayoutParams); @@ -308,13 +342,17 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, mScroller = new Scroller(context, new DecelerateInterpolator()); - mViewConfig = ViewConfiguration.get(context); + ViewConfiguration vc = ViewConfiguration.get(context); + mScaledTouchSlop = vc.getScaledTouchSlop(); + + float density = context.getResources().getDisplayMetrics().density; + mPanGap = (int) (20 * density); + mInitiatePanGap = (int) (10 * density); } private void createPanningArrows() { - // TODO: style mPanningArrows = new ImageView(mContext); - mPanningArrows.setImageResource(com.android.internal.R.drawable.zoom_ring_arrows); + mPanningArrows.setImageDrawable(mZoomRing.getPanningArrowsDrawable()); mPanningArrows.setLayoutParams(new FrameLayout.LayoutParams( FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT, @@ -328,15 +366,16 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, } /** - * Sets the angle (in radians) a user must travel in order for the client to - * get a callback. Once there is a callback, the accumulator resets. For - * example, if you set this to PI/6, it will give a callback every time the - * user moves PI/6 amount on the ring. - * - * @param callbackThreshold The angle for the callback threshold, in radians + * Sets the angle (in radians) between ticks. This is also the angle a user + * must move the thumb in order for the client to get a callback. Once there + * is a callback, the accumulator resets. For example, if you set this to + * PI/6, it will give a callback every time the user moves PI/6 amount on + * the ring. + * + * @param angle The angle for the callback threshold, in radians */ - public void setZoomCallbackThreshold(float callbackThreshold) { - mZoomRing.setCallbackThreshold((int) (callbackThreshold * ZoomRing.RADIAN_INT_MULTIPLIER)); + public void setTickDelta(float angle) { + mZoomRing.setTickDelta((int) (angle * ZoomRing.RADIAN_INT_MULTIPLIER)); } /** @@ -346,14 +385,23 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, * @hide Need a better way of doing this, but this one-off for browser so it * can have its final look for the usability study */ - public void setZoomRingTrack(int drawable) { + public void setTrackDrawable(int drawable) { mZoomRing.setBackgroundResource(drawable); } - + + /** + * Sets the callback for the zoom ring controller. + * + * @param callback The callback. + */ public void setCallback(OnZoomListener callback) { mCallback = callback; } + public void setVibration(boolean vibrate) { + mZoomRing.setVibration(vibrate); + } + public void setThumbAngle(float angle) { mZoomRing.setThumbAngle((int) (angle * ZoomRing.RADIAN_INT_MULTIPLIER)); } @@ -362,14 +410,6 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, mZoomRing.setThumbAngleAnimated((int) (angle * ZoomRing.RADIAN_INT_MULTIPLIER), 0); } - public void setResetThumbAutomatically(boolean resetThumbAutomatically) { - mZoomRing.setResetThumbAutomatically(resetThumbAutomatically); - } - - public void setVibration(boolean vibrate) { - mZoomRing.setVibration(vibrate); - } - public void setThumbVisible(boolean thumbVisible) { mZoomRing.setThumbVisible(thumbVisible); } @@ -407,7 +447,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, return; } - dismissZoomRingDelayed(ZOOM_CONTROLS_TIMEOUT); + dismissZoomRingDelayed(INACTIVITY_TIMEOUT); } else { mPanner.stop(); } @@ -429,12 +469,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, public void run() { refreshPositioningVariables(); resetZoomRing(); - - // TODO: remove this 'update' and just center zoom ring before the - // 'add', but need to make sure we have the width and height (which - // probably can only be retrieved after it's measured, which happens - // after it's added). - mWindowManager.updateViewLayout(mContainer, mContainerLayoutParams); + refreshContainerLayout(); if (mCallback != null) { mCallback.onVisibilityChanged(true); @@ -479,19 +514,34 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, } + private void refreshContainerLayout() { + if (mIsZoomRingVisible) { + mWindowManager.updateViewLayout(mContainer, mContainerLayoutParams); + } + } + /** - * TODO: docs - * + * Returns the container of the zoom ring widget. The client can add views + * here to be shown alongside the zoom ring. See {@link #getZoomRingId()}. + * <p> * Notes: - * - Touch dispatching is different. Only direct children who are clickable are eligble for touch events. - * - Please ensure you set your View to INVISIBLE not GONE when hiding it. - * - * @return + * <ul> + * <li> The controller dispatches touch events differently than the regular view + * framework. + * <li> Please ensure you set your view to INVISIBLE not GONE when hiding it. + * </ul> + * + * @return The layout used by the container. */ public FrameLayout getContainer() { return mContainer; } + /** + * Returns the id of the zoom ring widget. + * + * @return The id of the zoom ring widget. + */ public int getZoomRingId() { return mZoomRing.getId(); } @@ -514,7 +564,10 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, /** * Should be called by the client for each event belonging to the second tap * (the down, move, up, and cancel events). - * + * <p> + * In most cases, the client can use a {@link GestureDetector} and forward events from + * {@link GestureDetector.OnDoubleTapListener#onDoubleTapEvent(MotionEvent)}. + * * @param event The event belonging to the second tap. * @return Whether the event was consumed. */ @@ -550,9 +603,9 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, case MotionEvent.ACTION_MOVE: int x = (int) event.getX(); int y = (int) event.getY(); - if (Math.abs(x - mTapDragStartX) > mViewConfig.getScaledTouchSlop() || + if (Math.abs(x - mTapDragStartX) > mScaledTouchSlop || Math.abs(y - mTapDragStartY) > - mViewConfig.getScaledTouchSlop()) { + mScaledTouchSlop) { mZoomRing.setTapDragMode(true, x, y); mTouchMode = TOUCH_MODE_FORWARDING_FOR_TAP_DRAG; setTouchTargetView(mZoomRing); @@ -600,8 +653,8 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, int width = mContainer.getWidth(); int height = mContainer.getHeight(); mScroller.startScroll(lp.x, lp.y, mCenteredContainerX - lp.x, - mCenteredContainerY - lp.y, ZOOM_RING_RECENTERING_DURATION); - mHandler.sendEmptyMessage(MSG_SCROLLER_TICK); + mCenteredContainerY - lp.y, RECENTERING_DURATION); + mHandler.sendEmptyMessage(MSG_SCROLLER_STEP); } } @@ -636,18 +689,22 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, mZoomRing.handleTouch(event.getAction(), event.getEventTime(), x, y, rawX, rawY); } + /** @hide */ public void onZoomRingSetMovableHintVisible(boolean visible) { setPanningArrowsVisible(visible); } + /** @hide */ public void onUserInteractionStarted() { mHandler.removeMessages(MSG_DISMISS_ZOOM_RING); } + /** @hide */ public void onUserInteractionStopped() { - dismissZoomRingDelayed(ZOOM_CONTROLS_TIMEOUT); + dismissZoomRingDelayed(INACTIVITY_TIMEOUT); } + /** @hide */ public void onZoomRingMovingStarted() { mScroller.abortAnimation(); mTouchingEdgeStartTime = 0; @@ -664,6 +721,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, mPanningArrows.setVisibility(visible ? View.VISIBLE : View.INVISIBLE); } + /** @hide */ public boolean onZoomRingMoved(int deltaX, int deltaY, int rawX, int rawY) { if (mMovingZoomRingOobX != 0) { @@ -721,12 +779,12 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, ownerBounds.bottom - mZoomRingHeight : newZoomRingY; lp.y = newZoomRingY - zoomRingTop; - mWindowManager.updateViewLayout(mContainer, lp); - + refreshContainerLayout(); + // Check for pan boolean horizontalPanning = true; int leftGap = newZoomRingX - ownerBounds.left; - if (leftGap < MAX_PAN_GAP) { + if (leftGap < mPanGap) { if (leftGap == 0 && deltaX != 0 && mMovingZoomRingOobX == 0) { // Future moves in this direction should be accumulated in mMovingZoomRingOobX mMovingZoomRingOobX = deltaX / Math.abs(deltaX); @@ -736,7 +794,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, } } else { int rightGap = ownerBounds.right - (lp.x + mZoomRingWidth + zoomRingLeft); - if (rightGap < MAX_PAN_GAP) { + if (rightGap < mPanGap) { if (rightGap == 0 && deltaX != 0 && mMovingZoomRingOobX == 0) { mMovingZoomRingOobX = deltaX / Math.abs(deltaX); } @@ -750,7 +808,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, } int topGap = newZoomRingY - ownerBounds.top; - if (topGap < MAX_PAN_GAP) { + if (topGap < mPanGap) { if (topGap == 0 && deltaY != 0 && mMovingZoomRingOobY == 0) { mMovingZoomRingOobY = deltaY / Math.abs(deltaY); } @@ -759,7 +817,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, } } else { int bottomGap = ownerBounds.bottom - (lp.y + mZoomRingHeight + zoomRingTop); - if (bottomGap < MAX_PAN_GAP) { + if (bottomGap < mPanGap) { if (bottomGap == 0 && deltaY != 0 && mMovingZoomRingOobY == 0) { mMovingZoomRingOobY = deltaY / Math.abs(deltaY); } @@ -771,7 +829,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, if (!horizontalPanning) { // Neither are panning, reset any timer to start pan mode mTouchingEdgeStartTime = 0; - mPanningEnabledForThisInteraction = false; + mPanningInitiated = false; mPanner.stop(); } } @@ -781,13 +839,13 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, } private boolean shouldPan(int gap) { - if (mPanningEnabledForThisInteraction) return true; + if (mPanningInitiated) return true; - if (gap < MAX_INITIATE_PAN_GAP) { + if (gap < mInitiatePanGap) { long time = SystemClock.elapsedRealtime(); if (mTouchingEdgeStartTime != 0 && mTouchingEdgeStartTime + INITIATE_PAN_DELAY < time) { - mPanningEnabledForThisInteraction = true; + mPanningInitiated = true; return true; } else if (mTouchingEdgeStartTime == 0) { mTouchingEdgeStartTime = time; @@ -800,6 +858,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, return false; } + /** @hide */ public void onZoomRingMovingStopped() { mPanner.stop(); setPanningArrowsVisible(false); @@ -809,27 +868,25 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, } private int getStrengthFromGap(int gap) { - return gap > MAX_PAN_GAP ? 0 : - (MAX_PAN_GAP - gap) * 100 / MAX_PAN_GAP; + return gap > mPanGap ? 0 : + (mPanGap - gap) * 100 / mPanGap; } + /** @hide */ public void onZoomRingThumbDraggingStarted() { if (mCallback != null) { mCallback.onBeginDrag(); } } + /** @hide */ public boolean onZoomRingThumbDragged(int numLevels, int startAngle, int curAngle) { if (mCallback != null) { int deltaZoomLevel = -numLevels; - int globalZoomCenterX = mContainerLayoutParams.x + mZoomRing.getLeft() + - mZoomRingWidth / 2; - int globalZoomCenterY = mContainerLayoutParams.y + mZoomRing.getTop() + - mZoomRingHeight / 2; return mCallback.onDragZoom(deltaZoomLevel, - globalZoomCenterX - mOwnerViewBounds.left, - globalZoomCenterY - mOwnerViewBounds.top, + getZoomRingCenterXInOwnerCoordinates(), + getZoomRingCenterYInOwnerCoordinates(), (float) startAngle / ZoomRing.RADIAN_INT_MULTIPLIER, (float) curAngle / ZoomRing.RADIAN_INT_MULTIPLIER); } @@ -837,24 +894,36 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, return false; } + private int getZoomRingCenterXInOwnerCoordinates() { + int globalZoomCenterX = mContainerLayoutParams.x + mZoomRing.getLeft() + + mZoomRingWidth / 2; + return globalZoomCenterX - mOwnerViewBounds.left; + } + + private int getZoomRingCenterYInOwnerCoordinates() { + int globalZoomCenterY = mContainerLayoutParams.y + mZoomRing.getTop() + + mZoomRingHeight / 2; + return globalZoomCenterY - mOwnerViewBounds.top; + } + + /** @hide */ public void onZoomRingThumbDraggingStopped() { if (mCallback != null) { mCallback.onEndDrag(); } } - public void onZoomRingDismissed(boolean dismissImmediately) { - if (dismissImmediately) { - mHandler.removeMessages(MSG_DISMISS_ZOOM_RING); - setVisible(false); - } else { - dismissZoomRingDelayed(ZOOM_RING_DISMISS_DELAY); - } + /** @hide */ + public void onZoomRingDismissed() { + mHandler.removeMessages(MSG_DISMISS_ZOOM_RING); + setVisible(false); } + /** @hide */ public void onRingDown(int tickAngle, int touchAngle) { } + /** @hide */ public boolean onTouch(View v, MotionEvent event) { if (sTutorialDialog != null && sTutorialDialog.isShowing() && SystemClock.elapsedRealtime() - sTutorialShowTime >= TUTORIAL_MIN_DISPLAY_TIME) { @@ -904,8 +973,9 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, return retValue; } else { +// dismissZoomRingDelayed(ZOOM_CONTROLS_TIMEOUT); if (action == MotionEvent.ACTION_DOWN) { - dismissZoomRingDelayed(ZOOM_RING_DISMISS_DELAY); + dismissZoomRingDelayed(OUTSIDE_TAP_DISMISS_DELAY); } return false; @@ -932,7 +1002,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, int containerCenterY = mContainerLayoutParams.y + mContainer.getHeight() / 2; int distanceFromCenterX = rawX - containerCenterX; int distanceFromCenterY = rawY - containerCenterY; - int zoomRingRadius = mZoomRingWidth / 2 - ZOOM_RING_RADIUS_INSET; + int zoomRingRadius = mZoomRing.getTrackOuterRadius(); if (distanceFromCenterX * distanceFromCenterX + distanceFromCenterY * distanceFromCenterY <= zoomRingRadius * zoomRingRadius) { @@ -960,7 +1030,11 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, return null; } - /** Steals key events from the owner view. */ + /** + * Steals key events from the owner view. + * + * @hide + */ public boolean onKey(View v, int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_LEFT: @@ -971,12 +1045,14 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, case KeyEvent.KEYCODE_DPAD_UP: case KeyEvent.KEYCODE_DPAD_DOWN: // Keep the zoom alive a little longer - dismissZoomRingDelayed(ZOOM_CONTROLS_TIMEOUT); + dismissZoomRingDelayed(INACTIVITY_TIMEOUT); // They started zooming, hide the thumb arrows mZoomRing.setThumbArrowsVisible(false); if (mCallback != null && event.getAction() == KeyEvent.ACTION_DOWN) { - mCallback.onSimpleZoom(keyCode == KeyEvent.KEYCODE_DPAD_UP); + mCallback.onSimpleZoom(keyCode == KeyEvent.KEYCODE_DPAD_UP, + getZoomRingCenterXInOwnerCoordinates(), + getZoomRingCenterYInOwnerCoordinates()); } return true; @@ -985,18 +1061,18 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, return false; } - private void onScrollerTick() { + private void onScrollerStep() { if (!mScroller.computeScrollOffset() || !mIsZoomRingVisible) return; mContainerLayoutParams.x = mScroller.getCurrX(); mContainerLayoutParams.y = mScroller.getCurrY(); - mWindowManager.updateViewLayout(mContainer, mContainerLayoutParams); + refreshContainerLayout(); - mHandler.sendEmptyMessage(MSG_SCROLLER_TICK); + mHandler.sendEmptyMessage(MSG_SCROLLER_STEP); } private void onPostConfigurationChanged() { - dismissZoomRingDelayed(ZOOM_CONTROLS_TIMEOUT); + dismissZoomRingDelayed(INACTIVITY_TIMEOUT); refreshPositioningVariables(); ensureZoomRingIsCentered(); } @@ -1056,6 +1132,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, sTutorialShowTime = SystemClock.elapsedRealtime(); } + /** @hide Should only be used by Android platform apps */ public static void finishZoomTutorial(Context context, boolean userNotified) { if (sTutorialDialog == null) return; @@ -1078,22 +1155,45 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, } } + /** @hide Should only be used by Android platform apps */ public void finishZoomTutorial() { finishZoomTutorial(mContext, true); } + /** + * Sets the initial velocity of a pan. + * + * @param startVelocity The initial velocity to move the owner view, in + * pixels per second. + */ public void setPannerStartVelocity(float startVelocity) { mPanner.mStartVelocity = startVelocity; } + /** + * Sets the accelartion of the pan. + * + * @param acceleration The acceleration, in pixels per second squared. + */ public void setPannerAcceleration(float acceleration) { mPanner.mAcceleration = acceleration; } + /** + * Sets the maximum velocity of a pan. + * + * @param maxVelocity The max velocity to move the owner view, in pixels per + * second. + */ public void setPannerMaxVelocity(float maxVelocity) { mPanner.mMaxVelocity = maxVelocity; } + /** + * Sets the duration before acceleration will be applied. + * + * @param duration The duration, in milliseconds. + */ public void setPannerStartAcceleratingDuration(int duration) { mPanner.mStartAcceleratingDuration = duration; } @@ -1201,16 +1301,83 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback, } + /** + * Interface used to inform the client of zoom events that the user + * triggers. + */ public interface OnZoomListener { + /** + * Called when the user begins dragging the thumb on the zoom ring. + */ void onBeginDrag(); + + /** + * Called when the user drags the thumb and passes a tick causing a + * zoom. + * + * @param deltaZoomLevel The number of levels to be zoomed. Positive to + * zoom in, negative to zoom out. + * @param centerX The point about which to zoom. The zoom should pin + * this point, leaving it at the same coordinate. This is + * relative to the owner view's upper-left. + * @param centerY The point about which to zoom. The zoom should pin + * this point, leaving it at the same coordinate. This is + * relative to the owner view's upper-left. + * @param startAngle The angle where the user started dragging the thumb. + * @param curAngle The current angle of the thumb. + * @return Whether the owner was zoomed. + */ boolean onDragZoom(int deltaZoomLevel, int centerX, int centerY, float startAngle, float curAngle); + + /** + * Called when the user releases the thumb. + */ void onEndDrag(); - void onSimpleZoom(boolean deltaZoomLevel); + + /** + * Called when the user zooms via some other mechanism, for example + * arrow keys or a trackball. + * + * @param zoomIn Whether to zoom in (true) or out (false). + * @param centerX See {@link #onDragZoom(int, int, int, float, float)}. + * @param centerY See {@link #onDragZoom(int, int, int, float, float)}. + */ + void onSimpleZoom(boolean zoomIn, int centerX, int centerY); + + /** + * Called when the user begins moving the zoom ring in order to pan the + * owner. + */ void onBeginPan(); + + /** + * Called when the owner should pan as a result of the user moving the zoom ring. + * + * @param deltaX The amount to pan horizontally. + * @param deltaY The amount to pan vertically. + * @return Whether the owner was panned. + */ boolean onPan(int deltaX, int deltaY); + + /** + * Called when the user releases the zoom ring. + */ void onEndPan(); + + /** + * Called when the client should center the owner on the given point. + * + * @param x The x to center on, relative to the owner view's upper-left. + * @param y The y to center on, relative to the owner view's upper-left. + */ void onCenter(int x, int y); + + /** + * Called when the zoom ring's visibility changes. + * + * @param visible Whether the zoom ring is visible (true) or not (false). + */ void onVisibilityChanged(boolean visible); } } diff --git a/core/java/com/android/internal/os/HandlerCaller.java b/core/java/com/android/internal/os/HandlerCaller.java index bab1e21..932555d 100644 --- a/core/java/com/android/internal/os/HandlerCaller.java +++ b/core/java/com/android/internal/os/HandlerCaller.java @@ -120,6 +120,10 @@ public class HandlerCaller { return mH.obtainMessage(what, arg1, 0); } + public Message obtainMessageII(int what, int arg1, int arg2) { + return mH.obtainMessage(what, arg1, arg2); + } + public Message obtainMessageIO(int what, int arg1, Object arg2) { return mH.obtainMessage(what, arg1, 0, arg2); } diff --git a/core/java/com/android/internal/os/IResultReceiver.aidl b/core/java/com/android/internal/os/IResultReceiver.aidl new file mode 100644 index 0000000..2b70f95 --- /dev/null +++ b/core/java/com/android/internal/os/IResultReceiver.aidl @@ -0,0 +1,25 @@ +/* //device/java/android/android/app/IActivityPendingResult.aidl +** +** Copyright 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. +*/ + +package com.android.internal.os; + +import android.os.Bundle; + +/** @hide */ +oneway interface IResultReceiver { + void send(int resultCode, in Bundle resultData); +} diff --git a/core/java/com/android/internal/view/IInputMethod.aidl b/core/java/com/android/internal/view/IInputMethod.aidl index 9b00402..8ff18ed 100644 --- a/core/java/com/android/internal/view/IInputMethod.aidl +++ b/core/java/com/android/internal/view/IInputMethod.aidl @@ -18,6 +18,7 @@ package com.android.internal.view; import android.graphics.Rect; import android.os.IBinder; +import android.os.ResultReceiver; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.inputmethod.EditorInfo; @@ -48,7 +49,7 @@ oneway interface IInputMethod { void revokeSession(IInputMethodSession session); - void showSoftInput(int flags); + void showSoftInput(int flags, in ResultReceiver resultReceiver); - void hideSoftInput(); + void hideSoftInput(int flags, in ResultReceiver resultReceiver); } diff --git a/core/java/com/android/internal/view/IInputMethodManager.aidl b/core/java/com/android/internal/view/IInputMethodManager.aidl index 1b1c7f7..9030a3e 100644 --- a/core/java/com/android/internal/view/IInputMethodManager.aidl +++ b/core/java/com/android/internal/view/IInputMethodManager.aidl @@ -16,6 +16,7 @@ package com.android.internal.view; +import android.os.ResultReceiver; import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.EditorInfo; import com.android.internal.view.InputBindResult; @@ -38,8 +39,10 @@ interface IInputMethodManager { IInputContext inputContext, in EditorInfo attribute, boolean initial, boolean needResult); void finishInput(in IInputMethodClient client); - void showSoftInput(in IInputMethodClient client, int flags); - void hideSoftInput(in IInputMethodClient client, int flags); + boolean showSoftInput(in IInputMethodClient client, int flags, + in ResultReceiver resultReceiver); + boolean hideSoftInput(in IInputMethodClient client, int flags, + in ResultReceiver resultReceiver); void windowGainedFocus(in IInputMethodClient client, boolean viewHasFocus, boolean isTextEditor, int softInputMode, boolean first, int windowFlags); @@ -47,6 +50,7 @@ interface IInputMethodManager { void showInputMethodPickerFromClient(in IInputMethodClient client); void setInputMethod(in IBinder token, String id); void hideMySoftInput(in IBinder token, int flags); + void showMySoftInput(in IBinder token, int flags); void updateStatusIcon(in IBinder token, String packageName, int iconId); boolean setInputMethodEnabled(String id, boolean enabled); diff --git a/core/java/com/android/internal/view/IInputMethodSession.aidl b/core/java/com/android/internal/view/IInputMethodSession.aidl index 8a44976..a05ff14 100644 --- a/core/java/com/android/internal/view/IInputMethodSession.aidl +++ b/core/java/com/android/internal/view/IInputMethodSession.aidl @@ -46,4 +46,6 @@ oneway interface IInputMethodSession { void dispatchTrackballEvent(int seq, in MotionEvent event, IInputMethodCallback callback); void appPrivateCommand(String action, in Bundle data); + + void toggleSoftInput(int showFlags, int hideFlags); } diff --git a/core/java/com/android/internal/widget/EditStyledText.java b/core/java/com/android/internal/widget/EditStyledText.java new file mode 100644 index 0000000..48b4780 --- /dev/null +++ b/core/java/com/android/internal/widget/EditStyledText.java @@ -0,0 +1,653 @@ +/* + * 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. + */ + +package com.android.internal.widget; + +import android.content.Context; +import android.text.Editable; +import android.text.Spannable; +import android.text.style.AbsoluteSizeSpan; +import android.text.style.ForegroundColorSpan; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.EditText; + +/** + * EditStyledText extends EditText for managing the flow and status + * to edit the styled text. This manages the states and flows of editing, + * supports inserting image, import/export HTML. + */ +public class EditStyledText extends EditText { + + private static final String LOG_TAG = "EditStyledText"; + private static final boolean DBG = true; + + /** + * The modes of editing actions. + */ + /** The mode that no editing action is done. */ + public static final int MODE_NOTHING = 0; + /** The mode of copy. */ + public static final int MODE_COPY = 1; + /** The mode of paste. */ + public static final int MODE_PASTE = 2; + /** The mode of changing size. */ + public static final int MODE_SIZE = 3; + /** The mode of changing color. */ + public static final int MODE_COLOR = 4; + /** The mode of selection. */ + public static final int MODE_SELECT = 5; + + /** + * The state of selection. + */ + /** The state that selection isn't started. */ + public static final int STATE_SELECT_OFF = 0; + /** The state that selection is started. */ + public static final int STATE_SELECT_ON = 1; + /** The state that selection is done, but not fixed. */ + public static final int STATE_SELECTED = 2; + /** The state that selection is done and not fixed.*/ + public static final int STATE_SELECT_FIX = 3; + + /** + * The help message strings. + */ + public static final int HINT_MSG_NULL = 0; + public static final int HINT_MSG_COPY_BUF_BLANK = 1; + public static final int HINT_MSG_SELECT_START = 2; + public static final int HINT_MSG_SELECT_END = 3; + public static final int HINT_MSG_PUSH_COMPETE = 4; + + + /** + * EditStyledTextInterface provides functions for notifying messages + * to calling class. + */ + public interface EditStyledTextInterface { + public void notifyHintMsg(int msg_id); + } + private EditStyledTextInterface mESTInterface; + + /** + * EditStyledTextEditorManager manages the flow and status of + * each function for editing styled text. + */ + private EditStyledTextEditorManager mManager; + + /** + * EditStyledText extends EditText for managing flow of each editing + * action. + */ + public EditStyledText(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(); + } + + public EditStyledText(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public EditStyledText(Context context) { + super(context); + init(); + } + + /** + * Set View objects used in EditStyledText. + * @param helptext The view shows help messages. + */ + public void setParts(EditStyledTextInterface est_interface) { + mESTInterface = est_interface; + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + final boolean superResult = super.onTouchEvent(event); + if (event.getAction() == MotionEvent.ACTION_UP) { + if (DBG) { + Log.d(LOG_TAG, "--- onTouchEvent"); + } + mManager.onTouchScreen(); + } + return superResult; + } + + /** + * Start editing. This function have to be called before other + * editing actions. + */ + public void onStartEdit() { + mManager.onStartEdit(); + } + + /** + * End editing. + */ + public void onEndEdit() { + mManager.onEndEdit(); + } + + /** + * Start "Copy" action. + */ + public void onStartCopy() { + mManager.onStartCopy(); + } + + /** + * Start "Paste" action. + */ + public void onStartPaste() { + mManager.onStartPaste(); + } + + /** + * Start changing "Size" action. + */ + public void onStartSize() { + mManager.onStartSize(); + } + + /** + * Start changing "Color" action. + */ + public void onStartColor() { + mManager.onStartColor(); + } + + /** + * Start "Select" action. + */ + public void onStartSelect() { + mManager.onStartSelect(); + } + + /** + * Start "SelectAll" action. + */ + public void onStartSelectAll() { + mManager.onStartSelectAll(); + } + + /** + * Fix Selected Item. + */ + public void fixSelectedItem() { + mManager.onFixSelectItem(); + } + + /** + * Set Size of the Item. + * @param size The size of the Item. + */ + public void setItemSize(int size) { + mManager.setItemSize(size); + } + + /** + * Set Color of the Item. + * @param color The color of the Item. + */ + public void setItemColor(int color) { + mManager.setItemColor(color); + } + + /** + * Check editing is started. + * @return Whether editing is started or not. + */ + public boolean isEditting() { + return mManager.isEditting(); + } + + /** + * Get the mode of the action. + * @return The mode of the action. + */ + public int getEditMode() { + return mManager.getEditMode(); + } + + /** + * Get the state of the selection. + * @return The state of the selection. + */ + public int getSelectState() { + return mManager.getSelectState(); + } + + /** + * Initialize members. + */ + private void init() { + if (DBG) { + Log.d(LOG_TAG, "--- init"); + requestFocus(); + } + mManager = new EditStyledTextEditorManager(this); + } + + /** + * Notify hint messages what action is expected to calling class. + * @param msg + */ + private void setHintMessage(int msg_id) { + if (mESTInterface != null) { + mESTInterface.notifyHintMsg(msg_id); + } + } + + /** + * Object which manages the flow and status of editing actions. + */ + private class EditStyledTextEditorManager { + private boolean mEditFlag = false; + private int mMode = 0; + private int mState = 0; + private int mCurStart = 0; + private int mCurEnd = 0; + private EditStyledText mEST; + private Editable mTextSelectBuffer; + private CharSequence mTextCopyBufer; + + EditStyledTextEditorManager(EditStyledText est) { + mEST = est; + } + + public void onStartEdit() { + if (DBG) { + Log.d(LOG_TAG, "--- onEdit"); + } + handleResetEdit(); + } + + public void onEndEdit() { + if (DBG) { + Log.d(LOG_TAG, "--- onClickCancel"); + } + handleCancel(); + } + + public void onStartCopy() { + if (DBG) { + Log.d(LOG_TAG, "--- onClickCopy"); + } + handleCopy(); + } + + public void onStartPaste() { + if (DBG) { + Log.d(LOG_TAG, "--- onClickPaste"); + } + handlePaste(); + } + + public void onStartSize() { + if (DBG) { + Log.d(LOG_TAG, "--- onClickSize"); + } + handleSize(); + } + + public void setItemSize(int size) { + if (DBG) { + Log.d(LOG_TAG, "--- onClickSizeItem"); + } + if (mState == STATE_SELECTED || mState == STATE_SELECT_FIX) { + changeSizeSelectedText(size); + handleResetEdit(); + } + } + + public void setItemColor(int color) { + if (DBG) { + Log.d(LOG_TAG, "--- onClickColorItem"); + } + if (mState == STATE_SELECTED || mState == STATE_SELECT_FIX) { + changeColorSelectedText(color); + handleResetEdit(); + } + } + + public void onStartColor() { + if (DBG) { + Log.d(LOG_TAG, "--- onClickColor"); + } + handleColor(); + } + + public void onStartSelect() { + if (DBG) { + Log.d(LOG_TAG, "--- onClickSelect"); + } + mMode = MODE_SELECT; + if (mState == STATE_SELECT_OFF) { + handleSelect(); + } else { + offSelect(); + handleSelect(); + } + } + + public void onStartSelectAll() { + if (DBG) { + Log.d(LOG_TAG, "--- onClickSelectAll"); + } + handleSelectAll(); + } + + public void onTouchScreen() { + if (DBG) { + Log.d(LOG_TAG, "--- onClickView"); + } + if (mState == STATE_SELECT_ON || mState == STATE_SELECTED) { + handleSelect(); + } + } + + public void onFixSelectItem() { + if (DBG) { + Log.d(LOG_TAG, "--- onClickComplete"); + } + handleComplete(); + } + + public boolean isEditting() { + return mEditFlag; + } + + public int getEditMode() { + return mMode; + } + + public int getSelectState() { + return mState; + } + + private void handleCancel() { + if (DBG) { + Log.d(LOG_TAG, "--- handleCancel"); + } + mMode = MODE_NOTHING; + mState = STATE_SELECT_OFF; + mEditFlag = false; + offSelect(); + } + + private void handleComplete() { + if (DBG) { + Log.d(LOG_TAG, "--- handleComplete"); + } + if (!mEditFlag) { + return; + } + if (mState == STATE_SELECTED) { + mState = STATE_SELECT_FIX; + } + switch (mMode) { + case MODE_COPY: + handleCopy(); + break; + default: + break; + } + } + + private void handleCopy() { + if (DBG) { + Log.d(LOG_TAG, "--- handleCopy: " + mMode + "," + mState); + } + if (!mEditFlag) { + return; + } + if (mMode == MODE_NOTHING || mMode == MODE_SELECT) { + mMode = MODE_COPY; + if (mState == STATE_SELECTED) { + mState = STATE_SELECT_FIX; + storeSelectedText(); + } else { + handleSelect(); + } + } else if (mMode != MODE_COPY) { + handleCancel(); + mMode = MODE_COPY; + handleCopy(); + } else if (mState == STATE_SELECT_FIX) { + mEST.setHintMessage(HINT_MSG_NULL); + storeSelectedText(); + handleResetEdit(); + } + } + + private void handlePaste() { + if (DBG) { + Log.d(LOG_TAG, "--- handlePaste"); + } + if (!mEditFlag) { + return; + } + if (mTextSelectBuffer != null && mTextCopyBufer.length() > 0) { + mTextSelectBuffer.insert(mEST.getSelectionStart(), + mTextCopyBufer); + } else { + mEST.setHintMessage(HINT_MSG_COPY_BUF_BLANK); + } + } + + private void handleSize() { + if (DBG) { + Log.d(LOG_TAG, "--- handleSize: " + mMode + "," + mState); + } + if (!mEditFlag) { + return; + } + if (mMode == MODE_NOTHING || mMode == MODE_SELECT) { + mMode = MODE_SIZE; + if (mState == STATE_SELECTED) { + mState = STATE_SELECT_FIX; + } else { + handleSelect(); + } + } else if (mMode != MODE_SIZE) { + handleCancel(); + mMode = MODE_SIZE; + handleSize(); + } else if (mState == STATE_SELECT_FIX) { + mEST.setHintMessage(HINT_MSG_NULL); + } + } + + private void handleColor() { + if (DBG) { + Log.d(LOG_TAG, "--- handleColor"); + } + if (!mEditFlag) { + return; + } + if (mMode == MODE_NOTHING || mMode == MODE_SELECT) { + mMode = MODE_COLOR; + if (mState == STATE_SELECTED) { + mState = STATE_SELECT_FIX; + } else { + handleSelect(); + } + } else if (mMode != MODE_COLOR) { + handleCancel(); + mMode = MODE_COLOR; + handleSize(); + } else if (mState == STATE_SELECT_FIX) { + mEST.setHintMessage(HINT_MSG_NULL); + } + } + + private void handleSelect() { + if (DBG) { + Log.d(LOG_TAG, "--- handleSelect" + mEditFlag + "," + mState); + } + if (!mEditFlag) { + return; + } + if (mState == STATE_SELECT_OFF) { + if (isTextSelected()) { + Log.e(LOG_TAG, "Selection state is off, but selected"); + } + setSelectStartPos(); + mEST.setHintMessage(HINT_MSG_SELECT_END); + } else if (mState == STATE_SELECT_ON) { + if (isTextSelected()) { + Log.e(LOG_TAG, "Selection state now start, but selected"); + } + setSelectEndPos(); + mEST.setHintMessage(HINT_MSG_PUSH_COMPETE); + doNextHandle(); + } else if (mState == STATE_SELECTED) { + if (!isTextSelected()) { + Log.e(LOG_TAG, + "Selection state is done, but not selected"); + } + setSelectEndPos(); + doNextHandle(); + } + } + + private void handleSelectAll() { + if (DBG) { + Log.d(LOG_TAG, "--- handleSelectAll"); + } + if (!mEditFlag) { + return; + } + mEST.selectAll(); + } + + private void doNextHandle() { + switch (mMode) { + case MODE_COPY: + handleCopy(); + break; + case MODE_PASTE: + handlePaste(); + break; + case MODE_SIZE: + handleSize(); + break; + case MODE_COLOR: + handleColor(); + break; + default: + break; + } + } + + private void handleResetEdit() { + handleCancel(); + mEditFlag = true; + mEST.setHintMessage(HINT_MSG_SELECT_START); + } + + // Methods of selection + private void onSelect() { + if (DBG) { + Log.d(LOG_TAG, "--- onSelect"); + } + if (mCurStart >= 0 && mCurStart <= mEST.getText().length() + && mCurEnd >= 0 && mCurEnd <= mEST.getText().length()) { + mEST.setSelection(mCurStart, mCurEnd); + mState = STATE_SELECTED; + } else { + Log.e(LOG_TAG, + "Select is on, but cursor positions are illigal.:" + + mEST.getText().length() + "," + mCurStart + + "," + mCurEnd); + } + } + + private void offSelect() { + if (DBG) { + Log.d(LOG_TAG, "--- offSelect"); + } + int currpos = mEST.getSelectionStart(); + mEST.setSelection(currpos, currpos); + mState = STATE_SELECT_OFF; + } + + private void setSelectStartPos() { + if (DBG) { + Log.d(LOG_TAG, "--- setSelectStartPos"); + } + mCurStart = mEST.getSelectionStart(); + mState = STATE_SELECT_ON; + } + + private void setSelectEndPos() { + if (DBG) { + Log.d(LOG_TAG, "--- setSelectEndPos:" + + mEST.getSelectionStart()); + } + int curpos = mEST.getSelectionStart(); + if (curpos < mCurStart) { + if (DBG) { + Log.d(LOG_TAG, "--- setSelectEndPos: swap is done."); + } + mCurEnd = mCurStart; + mCurStart = curpos; + } else { + mCurEnd = curpos; + } + onSelect(); + } + + private boolean isTextSelected() { + if (DBG) { + Log.d(LOG_TAG, "--- isTextSelected:" + mCurStart + "," + + mCurEnd); + } + return (mCurStart != mCurEnd) + && (mState == STATE_SELECTED || + mState == STATE_SELECT_FIX); + } + + private void storeSelectedText() { + if (DBG) { + Log.d(LOG_TAG, "--- storeSelectedText"); + } + mTextSelectBuffer = mEST.getText(); + mTextCopyBufer = mTextSelectBuffer.subSequence(mCurStart, mCurEnd); + } + + private void changeSizeSelectedText(int size) { + if (DBG) { + Log.d(LOG_TAG, "--- changeSizeSelectedText:" + size + "," + + mCurStart + "," + mCurEnd); + } + mEST.getText().setSpan(new AbsoluteSizeSpan(size), mCurStart, + mCurEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + } + + private void changeColorSelectedText(int color) { + if (DBG) { + Log.d(LOG_TAG, "--- changeCollorSelectedText:" + color + "," + + mCurStart + "," + mCurEnd); + } + mEST.getText().setSpan(new ForegroundColorSpan(color), mCurStart, + mCurEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + } + } + +} diff --git a/core/jni/android/graphics/Typeface.cpp b/core/jni/android/graphics/Typeface.cpp index 32954ce..e951431 100644 --- a/core/jni/android/graphics/Typeface.cpp +++ b/core/jni/android/graphics/Typeface.cpp @@ -32,11 +32,11 @@ static SkTypeface* Typeface_create(JNIEnv* env, jobject, jstring name, SkTypeface* face; if (NULL == name) { - face = SkTypeface::Create(NULL, (SkTypeface::Style)style); + face = SkTypeface::CreateFromName(NULL, (SkTypeface::Style)style); } else { AutoJavaStringToUTF8 str(env, name); - face = SkTypeface::Create(str.c_str(), style); + face = SkTypeface::CreateFromName(str.c_str(), style); } return face; } @@ -50,7 +50,7 @@ static void Typeface_unref(JNIEnv* env, jobject obj, SkTypeface* face) { } static int Typeface_getStyle(JNIEnv* env, jobject obj, SkTypeface* face) { - return face->getStyle(); + return face->style(); } class AssetStream : public SkStream { diff --git a/core/jni/android_text_format_Time.cpp b/core/jni/android_text_format_Time.cpp index 8e41ec7..923e1aa 100644 --- a/core/jni/android_text_format_Time.cpp +++ b/core/jni/android_text_format_Time.cpp @@ -52,6 +52,9 @@ static jfieldID g_dateTimeFormatField = 0; static jfieldID g_amField = 0; static jfieldID g_pmField = 0; static jfieldID g_dateCommandField = 0; +static jfieldID g_localeField = 0; + +static jclass g_timeClass = NULL; static inline bool java2time(JNIEnv* env, Time* t, jobject o) { @@ -183,56 +186,101 @@ static jstring android_text_format_Time_format2445(JNIEnv* env, jobject This) static jstring android_text_format_Time_format(JNIEnv* env, jobject This, jstring formatObject) { - Time t; - struct strftime_locale locale; - jclass timeClass = env->FindClass("android/text/format/Time"); - jstring js_mon[12], js_month[12], js_wday[7], js_weekday[7]; - jstring js_X_fmt, js_x_fmt, js_c_fmt, js_am, js_pm, js_date_fmt; - jobjectArray ja; + // We only teardown and setup our 'locale' struct and other state + // when the Java-side locale changed. This is safe to do here + // without locking because we're always called from Java code + // synchronized on the class instance. + static jobject js_locale_previous = NULL; + static struct strftime_locale locale; + static jstring js_mon[12], js_month[12], js_wday[7], js_weekday[7]; + static jstring js_X_fmt, js_x_fmt, js_c_fmt, js_am, js_pm, js_date_fmt; + Time t; if (!java2time(env, &t, This)) return env->NewStringUTF(""); - ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_shortMonthsField); - for (int i = 0; i < 12; i++) { - js_mon[i] = (jstring) env->GetObjectArrayElement(ja, i); - locale.mon[i] = env->GetStringUTFChars(js_mon[i], NULL); - } + jclass timeClass = g_timeClass; + jobject js_locale = (jobject) env->GetStaticObjectField(timeClass, g_localeField); + if (js_locale_previous != js_locale) { + if (js_locale_previous != NULL) { + // Free the old one. + for (int i = 0; i < 12; i++) { + env->ReleaseStringUTFChars(js_mon[i], locale.mon[i]); + env->ReleaseStringUTFChars(js_month[i], locale.month[i]); + env->DeleteGlobalRef(js_mon[i]); + env->DeleteGlobalRef(js_month[i]); + } + + for (int i = 0; i < 7; i++) { + env->ReleaseStringUTFChars(js_wday[i], locale.wday[i]); + env->ReleaseStringUTFChars(js_weekday[i], locale.weekday[i]); + env->DeleteGlobalRef(js_wday[i]); + env->DeleteGlobalRef(js_weekday[i]); + } + + env->ReleaseStringUTFChars(js_X_fmt, locale.X_fmt); + env->ReleaseStringUTFChars(js_x_fmt, locale.x_fmt); + env->ReleaseStringUTFChars(js_c_fmt, locale.c_fmt); + env->ReleaseStringUTFChars(js_am, locale.am); + env->ReleaseStringUTFChars(js_pm, locale.pm); + env->ReleaseStringUTFChars(js_date_fmt, locale.date_fmt); + env->DeleteGlobalRef(js_X_fmt); + env->DeleteGlobalRef(js_x_fmt); + env->DeleteGlobalRef(js_c_fmt); + env->DeleteGlobalRef(js_am); + env->DeleteGlobalRef(js_pm); + env->DeleteGlobalRef(js_date_fmt); + } + js_locale_previous = js_locale; - ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_longMonthsField); - for (int i = 0; i < 12; i++) { - js_month[i] = (jstring) env->GetObjectArrayElement(ja, i); - locale.month[i] = env->GetStringUTFChars(js_month[i], NULL); - } + jobjectArray ja; + ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_shortMonthsField); + for (int i = 0; i < 12; i++) { + js_mon[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i)); + locale.mon[i] = env->GetStringUTFChars(js_mon[i], NULL); + } - ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_shortWeekdaysField); - for (int i = 0; i < 7; i++) { - js_wday[i] = (jstring) env->GetObjectArrayElement(ja, i); - locale.wday[i] = env->GetStringUTFChars(js_wday[i], NULL); - } + ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_longMonthsField); + for (int i = 0; i < 12; i++) { + js_month[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i)); + locale.month[i] = env->GetStringUTFChars(js_month[i], NULL); + } - ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_longWeekdaysField); - for (int i = 0; i < 7; i++) { - js_weekday[i] = (jstring) env->GetObjectArrayElement(ja, i); - locale.weekday[i] = env->GetStringUTFChars(js_weekday[i], NULL); - } + ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_shortWeekdaysField); + for (int i = 0; i < 7; i++) { + js_wday[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i)); + locale.wday[i] = env->GetStringUTFChars(js_wday[i], NULL); + } - js_X_fmt = (jstring) env->GetStaticObjectField(timeClass, g_timeOnlyFormatField); - locale.X_fmt = env->GetStringUTFChars(js_X_fmt, NULL); + ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_longWeekdaysField); + for (int i = 0; i < 7; i++) { + js_weekday[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i)); + locale.weekday[i] = env->GetStringUTFChars(js_weekday[i], NULL); + } + + js_X_fmt = (jstring) env->NewGlobalRef(env->GetStaticObjectField( + timeClass, g_timeOnlyFormatField)); + locale.X_fmt = env->GetStringUTFChars(js_X_fmt, NULL); - js_x_fmt = (jstring) env->GetStaticObjectField(timeClass, g_dateOnlyFormatField); - locale.x_fmt = env->GetStringUTFChars(js_x_fmt, NULL); + js_x_fmt = (jstring) env->NewGlobalRef(env->GetStaticObjectField( + timeClass, g_dateOnlyFormatField)); + locale.x_fmt = env->GetStringUTFChars(js_x_fmt, NULL); - js_c_fmt = (jstring) env->GetStaticObjectField(timeClass, g_dateTimeFormatField); - locale.c_fmt = env->GetStringUTFChars(js_c_fmt, NULL); + js_c_fmt = (jstring) env->NewGlobalRef(env->GetStaticObjectField( + timeClass, g_dateTimeFormatField)); + locale.c_fmt = env->GetStringUTFChars(js_c_fmt, NULL); - js_am = (jstring) env->GetStaticObjectField(timeClass, g_amField); - locale.am = env->GetStringUTFChars(js_am, NULL); + js_am = (jstring) env->NewGlobalRef(env->GetStaticObjectField( + timeClass, g_amField)); + locale.am = env->GetStringUTFChars(js_am, NULL); - js_pm = (jstring) env->GetStaticObjectField(timeClass, g_pmField); - locale.pm = env->GetStringUTFChars(js_pm, NULL); + js_pm = (jstring) env->NewGlobalRef(env->GetStaticObjectField( + timeClass, g_pmField)); + locale.pm = env->GetStringUTFChars(js_pm, NULL); - js_date_fmt = (jstring) env->GetStaticObjectField(timeClass, g_dateCommandField); - locale.date_fmt = env->GetStringUTFChars(js_date_fmt, NULL); + js_date_fmt = (jstring) env->NewGlobalRef(env->GetStaticObjectField( + timeClass, g_dateCommandField)); + locale.date_fmt = env->GetStringUTFChars(js_date_fmt, NULL); + } ACQUIRE_TIMEZONE(This, t) @@ -243,23 +291,6 @@ static jstring android_text_format_Time_format(JNIEnv* env, jobject This, env->ReleaseStringUTFChars(formatObject, format); RELEASE_TIMEZONE(This, t) - for (int i = 0; i < 12; i++) { - env->ReleaseStringUTFChars(js_mon[i], locale.mon[i]); - env->ReleaseStringUTFChars(js_month[i], locale.month[i]); - } - - for (int i = 0; i < 7; i++) { - env->ReleaseStringUTFChars(js_wday[i], locale.wday[i]); - env->ReleaseStringUTFChars(js_weekday[i], locale.weekday[i]); - } - - env->ReleaseStringUTFChars(js_X_fmt, locale.X_fmt); - env->ReleaseStringUTFChars(js_x_fmt, locale.x_fmt); - env->ReleaseStringUTFChars(js_c_fmt, locale.c_fmt); - env->ReleaseStringUTFChars(js_am, locale.am); - env->ReleaseStringUTFChars(js_pm, locale.pm); - env->ReleaseStringUTFChars(js_date_fmt, locale.date_fmt); - return env->NewStringUTF(r.string()); } @@ -307,7 +338,6 @@ static void android_text_format_Time_set(JNIEnv* env, jobject This, jlong millis { env->SetBooleanField(This, g_allDayField, JNI_FALSE); Time t; - if (!java2time(env, &t, This)) return; ACQUIRE_TIMEZONE(This, t) t.set(millis); @@ -592,6 +622,8 @@ int register_android_text_format_Time(JNIEnv* env) { jclass timeClass = env->FindClass("android/text/format/Time"); + g_timeClass = (jclass) env->NewGlobalRef(timeClass); + g_allDayField = env->GetFieldID(timeClass, "allDay", "Z"); g_secField = env->GetFieldID(timeClass, "second", "I"); g_minField = env->GetFieldID(timeClass, "minute", "I"); @@ -615,9 +647,9 @@ int register_android_text_format_Time(JNIEnv* env) g_amField = env->GetStaticFieldID(timeClass, "sAm", "Ljava/lang/String;"); g_pmField = env->GetStaticFieldID(timeClass, "sPm", "Ljava/lang/String;"); g_dateCommandField = env->GetStaticFieldID(timeClass, "sDateCommand", "Ljava/lang/String;"); + g_localeField = env->GetStaticFieldID(timeClass, "sLocale", "Ljava/util/Locale;"); return AndroidRuntime::registerNativeMethods(env, "android/text/format/Time", gMethods, NELEM(gMethods)); } }; // namespace android - diff --git a/core/res/assets/webkit/nullplugin.png b/core/res/assets/webkit/nullPlugin.png Binary files differindex 96a52e3..96a52e3 100644 --- a/core/res/assets/webkit/nullplugin.png +++ b/core/res/assets/webkit/nullPlugin.png diff --git a/core/res/res/anim/zoom_ring_enter.xml b/core/res/res/anim/zoom_ring_enter.xml new file mode 100644 index 0000000..13d89b2 --- /dev/null +++ b/core/res/res/anim/zoom_ring_enter.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* //device/apps/common/res/anim/fade_in.xml +** +** Copyright 2007, 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. +*/ +--> + +<set xmlns:android="http://schemas.android.com/apk/res/android" + android:interpolator="@anim/decelerate_interpolator"> + <scale android:fromXScale="0.75" android:toXScale="1.0" + android:fromYScale="0.75" android:toYScale="1.0" + android:pivotX="50%" android:pivotY="50%" + android:duration="75" /> + <alpha android:fromAlpha="0.0" android:toAlpha="1.0" + android:duration="75" /> +</set> diff --git a/core/res/res/anim/zoom_ring_exit.xml b/core/res/res/anim/zoom_ring_exit.xml new file mode 100644 index 0000000..177a4c3 --- /dev/null +++ b/core/res/res/anim/zoom_ring_exit.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* //device/apps/common/res/anim/fade_out.xml +** +** Copyright 2007, 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. +*/ +--> +<set xmlns:android="http://schemas.android.com/apk/res/android" + android:interpolator="@anim/accelerate_interpolator"> + <scale android:fromXScale="1.0" android:toXScale="0.75" + android:fromYScale="1.0" android:toYScale="0.75" + android:pivotX="50%" android:pivotY="50%" + android:duration="75" /> + <alpha android:fromAlpha="1.0" android:toAlpha="0.0" + android:duration="75"/> +</set> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 44da1d5..30b26fa 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -371,6 +371,8 @@ <attr name="spinnerItemStyle" format="reference" /> <!-- Default MapView style. --> <attr name="mapViewStyle" format="reference" /> + <!-- Default ZoomRing style. --> + <attr name="zoomRingStyle" format="reference" /> <!-- =================== --> <!-- Preference styles --> @@ -529,10 +531,23 @@ {@link android.text.InputType#TYPE_CLASS_TEXT} | {@link android.text.InputType#TYPE_TEXT_VARIATION_PASSWORD}. --> <flag name="textPassword" value="0x00000081" /> + <!-- Text that is a password that should be visible. Corresponds to + {@link android.text.InputType#TYPE_CLASS_TEXT} | + {@link android.text.InputType#TYPE_TEXT_VARIATION_VISIBLE_PASSWORD}. --> + <flag name="textVisiblePassword" value="0x00000091" /> <!-- Text that is being supplied as text in a web form. Corresponds to {@link android.text.InputType#TYPE_CLASS_TEXT} | {@link android.text.InputType#TYPE_TEXT_VARIATION_WEB_EDIT_TEXT}. --> - <flag name="textWebEditText" value="0x00000091" /> + <flag name="textWebEditText" value="0x000000a1" /> + <!-- Text that is filtering some other data. Corresponds to + {@link android.text.InputType#TYPE_CLASS_TEXT} | + {@link android.text.InputType#TYPE_TEXT_VARIATION_FILTER}. --> + <flag name="textFilter" value="0x000000b1" /> + <!-- Text that is for phonetic pronunciation, such as a phonetic name + field in a contact entry. Corresponds to + {@link android.text.InputType#TYPE_CLASS_TEXT} | + {@link android.text.InputType#TYPE_TEXT_VARIATION_PHONETIC}. --> + <flag name="textPhonetic" value="0x000000c1" /> <!-- A numeric only field. Corresponds to {@link android.text.InputType#TYPE_CLASS_NUMBER}. --> <flag name="number" value="0x00000002" /> @@ -1920,6 +1935,34 @@ </attr> <attr name="inputType" /> </declare-styleable> + <declare-styleable name="ZoomRing"> + <!-- Defines the drawable used as the thumb. --> + <attr name="thumbDrawable" format="reference" /> + <!-- Defines the distance of the thumb from the center of the ring. --> + <attr name="thumbDistance" format="dimension" /> + <!-- Defines the distance from the center of the ring to the beginning of the track. --> + <attr name="trackInnerRadius" format="dimension" /> + <!-- Defines the distance from the center of the ring to the end of the track. --> + <attr name="trackOuterRadius" format="dimension" /> + <!-- Defines the drawable used as a hint to show which direction is zoom in. This should be + the same size as the zoom ring's asset. It will be rotated programmatically. --> + <attr name="zoomInArrowDrawable" format="reference" /> + <!-- Defines the drawable used as a hint to show which direction is zoom out. This should be + the same size as the zoom ring's asset. It will be rotated programmatically. --> + <attr name="zoomOutArrowDrawable" format="reference" /> + <!-- Defines the drawable that is laid on top of the zoom in arrow. + For example, this could be a +. --> + <attr name="zoomInArrowHintDrawable" format="reference" /> + <!-- Defines the drawable that is laid on top of the zoom out arrow. + For example, this could be a -. --> + <attr name="zoomOutArrowHintDrawable" format="reference" /> + <!-- Defines the distance of the zoom arrow hint from the center of the ring. --> + <attr name="zoomArrowHintDistance" format="dimension" /> + <!-- Defines the offset of the zoom arrow hints from the thumb. Valid ranges are [0, 359] --> + <attr name="zoomArrowHintOffsetAngle" format="integer" /> + <!-- Defines the drawable used to hint that the zoom ring can pan its owner. --> + <attr name="panningArrowsDrawable" format="reference" /> + </declare-styleable> <declare-styleable name="PopupWindow"> <attr name="popupBackground" format="reference|color" /> </declare-styleable> @@ -2183,7 +2226,9 @@ </declare-styleable> <declare-styleable name="LevelListDrawableItem"> + <!-- The minimum level allowed for this item. --> <attr name="minLevel" format="integer" /> + <!-- The maximum level allowed for this item. --> <attr name="maxLevel" format="integer" /> <attr name="drawable" /> </declare-styleable> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 346fa80..d54bca3 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -1565,7 +1565,7 @@ want a 24-hour clock. You can remove the colon or make other punctuation changes appropriate for your locale. --> - <string name="twenty_four_hour_time_format" format="date"><xliff:g id="hour" example="23">H</xliff:g>:<xliff:g id="minute" example="59">mm</xliff:g></string> + <string name="twenty_four_hour_time_format" format="date"><xliff:g id="hour" example="23">HH</xliff:g>:<xliff:g id="minute" example="59">mm</xliff:g></string> <!-- Quoted name for 12pm, lowercase --> <string name="noon">"noon"</string> @@ -2293,6 +2293,9 @@ <!-- Long label for a button on a full-screen input method for the "Next" action. --> <string name="ime_action_next">Next</string> + <!-- Long label for a button on a full-screen input method for the "Done" action. --> + <string name="ime_action_done">Done</string> + <!-- Long label for a button on a full-screen input method for an unknown action. --> <string name="ime_action_default">Execute</string> diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml index 54eba62..9f4d82e 100644 --- a/core/res/res/values/styles.xml +++ b/core/res/res/values/styles.xml @@ -144,6 +144,11 @@ <item name="windowExitAnimation">@anim/search_bar_exit</item> </style> + <!-- Standard animations for the zoom ring. --> + <style name="Animation.ZoomRing"> + <item name="windowEnterAnimation">@anim/zoom_ring_enter</item> + <item name="windowExitAnimation">@anim/zoom_ring_exit</item> + </style> <!-- Status Bar Styles --> <style name="TextAppearance.StatusBarTitle"> @@ -456,6 +461,21 @@ <item name="android:shadowRadius">2.75</item> </style> + <style name="Widget.ZoomRing"> + <item name="android:background">@android:drawable/zoom_ring_track</item> + <item name="android:thumbDrawable">@android:drawable/zoom_ring_thumb</item> + <item name="android:thumbDistance">63dip</item> + <item name="android:trackInnerRadius">43dip</item> + <item name="android:trackOuterRadius">91dip</item> + <item name="android:zoomInArrowDrawable">@android:drawable/zoom_ring_thumb_plus_arrow_rotatable</item> + <item name="android:zoomOutArrowDrawable">@android:drawable/zoom_ring_thumb_minus_arrow_rotatable</item> + <item name="android:zoomInArrowHintDrawable">@android:drawable/zoom_ring_thumb_plus</item> + <item name="android:zoomOutArrowHintDrawable">@android:drawable/zoom_ring_thumb_minus</item> + <item name="android:zoomArrowHintDistance">69dip</item> + <item name="android:zoomArrowHintOffsetAngle">33</item> + <item name="android:panningArrowsDrawable">@android:drawable/zoom_ring_arrows</item> + </style> + <!-- Text Appearances --> <eat-comment /> diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml index 01c46de..bde6b2a 100644 --- a/core/res/res/values/themes.xml +++ b/core/res/res/values/themes.xml @@ -162,6 +162,7 @@ <item name="spinnerItemStyle">@android:style/Widget.TextView.SpinnerItem</item> <item name="dropDownHintAppearance">@android:style/TextAppearance.Widget.DropDownHint</item> <item name="keyboardViewStyle">@android:style/Widget.KeyboardView</item> + <item name="zoomRingStyle">@android:style/Widget.ZoomRing</item> <!-- Preference styles --> <item name="preferenceScreenStyle">@android:style/Preference.PreferenceScreen</item> diff --git a/graphics/java/android/graphics/drawable/LevelListDrawable.java b/graphics/java/android/graphics/drawable/LevelListDrawable.java index cf94a3a..7ae649f 100644 --- a/graphics/java/android/graphics/drawable/LevelListDrawable.java +++ b/graphics/java/android/graphics/drawable/LevelListDrawable.java @@ -34,9 +34,20 @@ import android.util.AttributeSet; * battery level. * <p> * It can be defined in an XML file with the <code><level-list></code> element. - * Each Drawable level is defined in a nested <code><item></code> + * Each Drawable level is defined in a nested <code><item></code>. For example: * </p> - * + * <pre> + * <level-list xmlns:android="http://schemas.android.com/apk/res/android"> + * <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_signal_1" /> + * <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_signal_2" /> + * <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_signal_3" /> + * <item android:maxLevel="3" android:drawable="@drawable/ic_wifi_signal_4" /> + * </level-list> + *</pre> + * <p>With this XML saved into the res/drawable/ folder of the project, it can be referenced as + * the drawable for an {@link android.widget.ImageView}. The default image is the first in the list. + * It can then be changed to one of the other levels with + * {@link android.widget.ImageView#setImageLevel(int)}.</p> * @attr ref android.R.styleable#LevelListDrawableItem_minLevel * @attr ref android.R.styleable#LevelListDrawableItem_maxLevel * @attr ref android.R.styleable#LevelListDrawableItem_drawable diff --git a/include/ui/ICameraService.h b/include/ui/ICameraService.h index dfd8923..c652c51 100644 --- a/include/ui/ICameraService.h +++ b/include/ui/ICameraService.h @@ -28,7 +28,7 @@ namespace android { class ICameraService : public IInterface { -protected: +public: enum { CONNECT = IBinder::FIRST_CALL_TRANSACTION, }; diff --git a/include/utils/threads.h b/include/utils/threads.h index 7dca810..8d8d46a 100644 --- a/include/utils/threads.h +++ b/include/utils/threads.h @@ -249,41 +249,6 @@ private: /* - * Read/write lock. The resource can have multiple readers or one writer, - * but can't be read and written at the same time. - * - * The same thread should not call a lock function while it already has - * a lock. (Should be okay for multiple readers.) - */ -class ReadWriteLock { -public: - ReadWriteLock() - : mNumReaders(0), mNumWriters(0) - {} - ~ReadWriteLock() {} - - void lockForRead(); - bool tryLockForRead(); - void unlockForRead(); - - void lockForWrite(); - bool tryLockForWrite(); - void unlockForWrite(); - -private: - int mNumReaders; - int mNumWriters; - - Mutex mLock; - Condition mReadWaiter; - Condition mWriteWaiter; -#if defined(PRINT_RENDER_TIMES) - DurationTimer mDebugTimer; -#endif -}; - - -/* * This is our spiffy thread object! */ diff --git a/libs/utils/CallStack.cpp b/libs/utils/CallStack.cpp index 26fb22a..2fdaa71 100644 --- a/libs/utils/CallStack.cpp +++ b/libs/utils/CallStack.cpp @@ -120,13 +120,18 @@ class MapInfo { char name[]; }; - const char *map_to_name(uint64_t pc, const char* def) { + const char *map_to_name(uint64_t pc, const char* def, uint64_t* start) { mapinfo* mi = getMapInfoList(); while(mi) { - if ((pc >= mi->start) && (pc < mi->end)) + if ((pc >= mi->start) && (pc < mi->end)) { + if (start) + *start = mi->start; return mi->name; + } mi = mi->next; } + if (start) + *start = 0; return def; } @@ -183,8 +188,15 @@ public: } } - static const char *mapAddressToName(const void* pc, const char* def) { - return sMapInfo.map_to_name((uint64_t)pc, def); + static const char *mapAddressToName(const void* pc, const char* def, + void const** start) + { + uint64_t s; + char const* name = sMapInfo.map_to_name(uint64_t(uintptr_t(pc)), def, &s); + if (start) { + *start = (void*)s; + } + return name; } }; @@ -297,8 +309,9 @@ String8 CallStack::toStringSingleLevel(const char* prefix, int32_t level) const res.append(name); res.append(tmp2); } else { - name = MapInfo::mapAddressToName(ip, "<unknown>"); - snprintf(tmp, 256, "pc %p %s", ip, name); + void const* start = 0; + name = MapInfo::mapAddressToName(ip, "<unknown>", &start); + snprintf(tmp, 256, "pc %08lx %s", uintptr_t(ip)-uintptr_t(start), name); res.append(tmp); } res.append("\n"); diff --git a/libs/utils/ResourceTypes.cpp b/libs/utils/ResourceTypes.cpp index 71e7cd7..2ad3bfe 100644 --- a/libs/utils/ResourceTypes.cpp +++ b/libs/utils/ResourceTypes.cpp @@ -176,7 +176,9 @@ size_t Res_png_9patch::serializedSize() void* Res_png_9patch::serialize() { - void* newData = malloc(serializedSize()); + // Use calloc since we're going to leave a few holes in the data + // and want this to run cleanly under valgrind + void* newData = calloc(1, serializedSize()); serialize(newData); return newData; } @@ -3150,13 +3152,13 @@ bool ResTable::stringToValue(Res_value* outValue, String16* outString, const char16_t* pos = s; while (pos < end && !failed) { const char16_t* start = pos; - end++; + pos++; while (pos < end && *pos != '|') { pos++; } - //printf("Looking for: %s\n", String8(start, pos-start).string()); + //printf("Looking for: %s\n", String8(start, pos-start).string()); const bag_entry* bagi = bag; - ssize_t i; + ssize_t i; for (i=0; i<cnt; i++, bagi++) { if (!Res_INTERNALID(bagi->map.name.ident)) { //printf("Trying attr #%08x\n", bagi->map.name.ident); @@ -3184,7 +3186,7 @@ bool ResTable::stringToValue(Res_value* outValue, String16* outString, } unlockBag(bag); if (!failed) { - //printf("Final flag value: 0x%lx\n", outValue->data); + //printf("Final flag value: 0x%lx\n", outValue->data); return true; } } @@ -3192,7 +3194,7 @@ bool ResTable::stringToValue(Res_value* outValue, String16* outString, if (fromAccessor) { if (accessor->getAttributeFlags(attrID, s, len, outValue)) { - //printf("Final flag value: 0x%lx\n", outValue->data); + //printf("Final flag value: 0x%lx\n", outValue->data); return true; } } diff --git a/libs/utils/String16.cpp b/libs/utils/String16.cpp index 1f81cad..ae0ae1e 100644 --- a/libs/utils/String16.cpp +++ b/libs/utils/String16.cpp @@ -388,7 +388,7 @@ status_t String16::setTo(const char16_t* other, size_t len) ->editResize((len+1)*sizeof(char16_t)); if (buf) { char16_t* str = (char16_t*)buf->data(); - memcpy(str, other, len*sizeof(char16_t)); + memmove(str, other, len*sizeof(char16_t)); str[len] = 0; mString = str; return NO_ERROR; diff --git a/libs/utils/Threads.cpp b/libs/utils/Threads.cpp index 5f407a9..9287c0b 100644 --- a/libs/utils/Threads.cpp +++ b/libs/utils/Threads.cpp @@ -14,6 +14,7 @@ * limitations under the License. */ +// #define LOG_NDEBUG 0 #define LOG_TAG "libutils.threads" #include <utils/threads.h> @@ -838,148 +839,6 @@ void Condition::broadcast() #error "condition variables not supported on this platform" #endif - -/* - * =========================================================================== - * ReadWriteLock class - * =========================================================================== - */ - -#if 0 -#pragma mark - -#pragma mark ReadWriteLock -#endif - -/* - * Add a reader. Readers are nice. They share. - */ -void ReadWriteLock::lockForRead() -{ - mLock.lock(); - while (mNumWriters > 0) { - LOG(LOG_DEBUG, "thread", "+++ lockForRead: waiting\n"); - mReadWaiter.wait(mLock); - } - assert(mNumWriters == 0); - mNumReaders++; -#if defined(PRINT_RENDER_TIMES) - if (mNumReaders == 1) - mDebugTimer.start(); -#endif - mLock.unlock(); -} - -/* - * Try to add a reader. If it doesn't work right away, return "false". - */ -bool ReadWriteLock::tryLockForRead() -{ - mLock.lock(); - if (mNumWriters > 0) { - mLock.unlock(); - return false; - } - assert(mNumWriters == 0); - mNumReaders++; -#if defined(PRINT_RENDER_TIMES) - if (mNumReaders == 1) - mDebugTimer.start(); -#endif - mLock.unlock(); - return true; -} - -/* - * Remove a reader. - */ -void ReadWriteLock::unlockForRead() -{ - mLock.lock(); - if (mNumReaders == 0) { - mLock.unlock(); - LOG(LOG_WARN, "thread", - "WARNING: unlockForRead requested, but not locked\n"); - return; - } - assert(mNumReaders > 0); - assert(mNumWriters == 0); - mNumReaders--; - if (mNumReaders == 0) { // last reader? -#if defined(PRINT_RENDER_TIMES) - mDebugTimer.stop(); - printf(" rdlk held %.3f msec\n", - (double) mDebugTimer.durationUsecs() / 1000.0); -#endif - //printf("+++ signaling writers (if any)\n"); - mWriteWaiter.signal(); // wake one writer (if any) - } - mLock.unlock(); -} - -/* - * Add a writer. This requires exclusive access to the object. - */ -void ReadWriteLock::lockForWrite() -{ - mLock.lock(); - while (mNumReaders > 0 || mNumWriters > 0) { - LOG(LOG_DEBUG, "thread", "+++ lockForWrite: waiting\n"); - mWriteWaiter.wait(mLock); - } - assert(mNumReaders == 0); - assert(mNumWriters == 0); - mNumWriters++; -#if defined(PRINT_RENDER_TIMES) - mDebugTimer.start(); -#endif - mLock.unlock(); -} - -/* - * Try to add a writer. If it doesn't work right away, return "false". - */ -bool ReadWriteLock::tryLockForWrite() -{ - mLock.lock(); - if (mNumReaders > 0 || mNumWriters > 0) { - mLock.unlock(); - return false; - } - assert(mNumReaders == 0); - assert(mNumWriters == 0); - mNumWriters++; -#if defined(PRINT_RENDER_TIMES) - mDebugTimer.start(); -#endif - mLock.unlock(); - return true; -} - -/* - * Remove a writer. - */ -void ReadWriteLock::unlockForWrite() -{ - mLock.lock(); - if (mNumWriters == 0) { - mLock.unlock(); - LOG(LOG_WARN, "thread", - "WARNING: unlockForWrite requested, but not locked\n"); - return; - } - assert(mNumWriters == 1); - mNumWriters--; -#if defined(PRINT_RENDER_TIMES) - mDebugTimer.stop(); - //printf(" wrlk held %.3f msec\n", - // (double) mDebugTimer.durationUsecs() / 1000.0); -#endif - mWriteWaiter.signal(); // should other writers get first dibs? - //printf("+++ signaling readers (if any)\n"); - mReadWaiter.broadcast(); // wake all readers (if any) - mLock.unlock(); -} - // ---------------------------------------------------------------------------- #if 0 @@ -1027,6 +886,8 @@ status_t Thread::run(const char* name, int32_t priority, size_t stack) // hold a strong reference on ourself mHoldSelf = this; + mRunning = true; + bool res; if (mCanCallJava) { res = createThreadEtc(_threadLoop, @@ -1040,14 +901,16 @@ status_t Thread::run(const char* name, int32_t priority, size_t stack) mStatus = UNKNOWN_ERROR; // something happened! mRunning = false; mThread = thread_id_t(-1); + mHoldSelf.clear(); // "this" may have gone away after this. + + return UNKNOWN_ERROR; } - if (mStatus < 0) { - // something happened, don't leak - mHoldSelf.clear(); - } - - return mStatus; + // Do not refer to mStatus here: The thread is already running (may, in fact + // already have exited with a valid mStatus result). The NO_ERROR indication + // here merely indicates successfully starting the thread and does not + // imply successful termination/execution. + return NO_ERROR; } int Thread::_threadLoop(void* user) @@ -1057,20 +920,32 @@ int Thread::_threadLoop(void* user) wp<Thread> weak(strong); self->mHoldSelf.clear(); - // we're about to run... - self->mStatus = self->readyToRun(); - if (self->mStatus!=NO_ERROR || self->mExitPending) { - // pretend the thread never started... - self->mExitPending = false; - self->mRunning = false; - return 0; - } - - // thread is running now - self->mRunning = true; + bool first = true; do { - bool result = self->threadLoop(); + bool result; + if (first) { + first = false; + self->mStatus = self->readyToRun(); + result = (self->mStatus == NO_ERROR); + + if (result && !self->mExitPending) { + // Binder threads (and maybe others) rely on threadLoop + // running at least once after a successful ::readyToRun() + // (unless, of course, the thread has already been asked to exit + // at that point). + // This is because threads are essentially used like this: + // (new ThreadSubclass())->run(); + // The caller therefore does not retain a strong reference to + // the thread and the thread would simply disappear after the + // successful ::readyToRun() call instead of entering the + // threadLoop at least once. + result = self->threadLoop(); + } + } else { + result = self->threadLoop(); + } + if (result == false || self->mExitPending) { self->mExitPending = true; self->mLock.lock(); @@ -1097,24 +972,23 @@ void Thread::requestExit() status_t Thread::requestExitAndWait() { - if (mStatus == OK) { - - if (mThread == getThreadId()) { - LOGW( - "Thread (this=%p): don't call waitForExit() from this " - "Thread object's thread. It's a guaranteed deadlock!", - this); - return WOULD_BLOCK; - } - - requestExit(); + if (mThread == getThreadId()) { + LOGW( + "Thread (this=%p): don't call waitForExit() from this " + "Thread object's thread. It's a guaranteed deadlock!", + this); - Mutex::Autolock _l(mLock); - while (mRunning == true) { - mThreadExitedCondition.wait(mLock); - } - mExitPending = false; + return WOULD_BLOCK; } + + requestExit(); + + Mutex::Autolock _l(mLock); + while (mRunning == true) { + mThreadExitedCondition.wait(mLock); + } + mExitPending = false; + return mStatus; } diff --git a/media/java/android/media/AudioTrack.java b/media/java/android/media/AudioTrack.java index 997cd44..316fa7a 100644 --- a/media/java/android/media/AudioTrack.java +++ b/media/java/android/media/AudioTrack.java @@ -153,31 +153,23 @@ public class AudioTrack */ private final Object mPlayStateLock = new Object(); /** - * The listener the AudioTrack notifies previously set marker is reached. - * @see #setMarkerReachedListener(OnMarkerReachedListener) + * The listener the AudioTrack notifies when the playback position reaches a marker + * or for periodic updates during the progression of the playback head. + * @see #setPlaybackPositionUpdateListener(OnPlaybackPositionUpdateListener) */ - private OnMarkerReachedListener mMarkerListener = null; + private OnPlaybackPositionUpdateListener mPositionListener = null; /** - * Lock to protect marker listener updates against event notifications + * Lock to protect event listener updates against event notifications */ - private final Object mMarkerListenerLock = new Object(); - /** - * The listener the AudioTrack notifies periodically during playback. - * @see #setPeriodicNotificationListener(OnPeriodicNotificationListener) - */ - private OnPeriodicNotificationListener mPeriodicListener = null; - /** - * Lock to protect periodic listener updates against event notifications - */ - private final Object mPeriodicListenerLock = new Object(); + private final Object mPositionListenerLock = new Object(); /** * Size of the native audio buffer. */ private int mNativeBufferSizeInBytes = 0; /** - * Handler for events coming from the native code + * Handler for marker events coming from the native code */ - private NativeEventHandler mNativeEventHandler = null; + private NativeEventHandlerDelegate mEventHandlerDelegate = null; /** * The audio data sampling rate in Hz. */ @@ -373,22 +365,6 @@ public class AudioTrack } - // Convenience method for the creation of the native event handler - // It is called only when a non-null event listener is set. - // precondition: - // mNativeEventHandler is null - private void createNativeEventHandler() { - Looper looper; - if ((looper = Looper.myLooper()) != null) { - mNativeEventHandler = new NativeEventHandler(this, looper); - } else if ((looper = Looper.getMainLooper()) != null) { - mNativeEventHandler = new NativeEventHandler(this, looper); - } else { - mNativeEventHandler = null; - } - } - - /** * Releases the native AudioTrack resources. */ @@ -592,33 +568,28 @@ public class AudioTrack // Initialization / configuration //-------------------- /** - * Sets the listener the AudioTrack notifies when a previously set marker is reached. + * Sets the listener the AudioTrack notifies when a previously set marker is reached or + * for each periodic playback head position update. * @param listener */ - public void setMarkerReachedListener(OnMarkerReachedListener listener) { - synchronized (mMarkerListenerLock) { - mMarkerListener = listener; - } - if ((listener != null) && (mNativeEventHandler == null)) { - createNativeEventHandler(); - } + public void setPlaybackPositionUpdateListener(OnPlaybackPositionUpdateListener listener) { + setPlaybackPositionUpdateListener(listener, null); } + - - /** - * Sets the listener the AudioTrack notifies periodically during playback. - * @param listener - */ - public void setPeriodicNotificationListener(OnPeriodicNotificationListener listener) { - synchronized (mPeriodicListenerLock) { - mPeriodicListener = listener; + public void setPlaybackPositionUpdateListener(OnPlaybackPositionUpdateListener listener, + Handler handler) { + synchronized (mPositionListenerLock) { + mPositionListener = listener; } - if ((listener != null) && (mNativeEventHandler == null)) { - createNativeEventHandler(); + if (listener != null) { + mEventHandlerDelegate = new NativeEventHandlerDelegate(this, handler); } + } + /** * Sets the specified left/right output volume values on the AudioTrack. Values are clamped * to the ({@link #getMinVolume()}, {@link #getMaxVolume()}) interval if outside this range. @@ -895,23 +866,16 @@ public class AudioTrack // Interface definitions //-------------------- /** - * Interface definition for a callback to be invoked when an AudioTrack has - * reached a notification marker set by setNotificationMarkerPosition(). + * Interface definition for a callback to be invoked when the playback head position of + * an AudioTrack has reached a notification marker or has increased by a certain period. */ - public interface OnMarkerReachedListener { + public interface OnPlaybackPositionUpdateListener { /** * Called on the listener to notify it that the previously set marker has been reached * by the playback head. */ void onMarkerReached(AudioTrack track); - } - - - /** - * Interface definition for a callback to be invoked for each periodic AudioTrack - * update during playback. The update interval is set by setPositionNotificationPeriod(). - */ - public interface OnPeriodicNotificationListener { + /** * Called on the listener to periodically notify it that the playback head has reached * a multiple of the notification period. @@ -924,42 +888,63 @@ public class AudioTrack // Inner classes //-------------------- /** - * Helper class to handle the forwarding of native events to the appropriate listeners - */ - private class NativeEventHandler extends Handler - { - private AudioTrack mAudioTrack; - - public NativeEventHandler(AudioTrack mp, Looper looper) { - super(looper); - mAudioTrack = mp; - } - - @Override - public void handleMessage(Message msg) { - if (mAudioTrack == null) { - return; - } - switch(msg.what) { - case NATIVE_EVENT_MARKER: - synchronized (mMarkerListenerLock) { - if (mAudioTrack.mMarkerListener != null) { - mAudioTrack.mMarkerListener.onMarkerReached(mAudioTrack); - } - } - break; - case NATIVE_EVENT_NEW_POS: - synchronized (mPeriodicListenerLock) { - if (mAudioTrack.mPeriodicListener != null) { - mAudioTrack.mPeriodicListener.onPeriodicNotification(mAudioTrack); - } + * Helper class to handle the forwarding of native events to the appropriate listener + * (potentially) handled in a different thread + */ + private class NativeEventHandlerDelegate { + private final AudioTrack mAudioTrack; + private final Handler mHandler; + + NativeEventHandlerDelegate(AudioTrack track, Handler handler) { + mAudioTrack = track; + // find the looper for our new event handler + Looper looper; + if (handler != null) { + looper = handler.getLooper(); + } else { + // no given handler, look for main looper + if ((looper = Looper.myLooper()) == null) { + looper = Looper.getMainLooper(); } - break; - default: - Log.e(TAG, "[ android.media.AudioTrack.NativeEventHandler ] " + - "Unknown event type: " + msg.what); - break; } + // construct the event handler with this looper + if (looper != null) { + // implement the event handler delegate + mHandler = new Handler(looper) { + @Override + public void handleMessage(Message msg) { + if (mAudioTrack == null) { + return; + } + OnPlaybackPositionUpdateListener listener = null; + synchronized (mPositionListenerLock) { + listener = mAudioTrack.mPositionListener; + } + switch(msg.what) { + case NATIVE_EVENT_MARKER: + if (listener != null) { + listener.onMarkerReached(mAudioTrack); + } + break; + case NATIVE_EVENT_NEW_POS: + if (listener != null) { + listener.onPeriodicNotification(mAudioTrack); + } + break; + default: + Log.e(TAG, "[ android.media.AudioTrack.NativeEventHandler ] " + + "Unknown event type: " + msg.what); + break; + } + } + }; + } else { + mHandler = null; + } + } + + Handler getHandler() { + return mHandler; } } @@ -976,9 +961,10 @@ public class AudioTrack return; } - if (track.mNativeEventHandler != null) { - Message m = track.mNativeEventHandler.obtainMessage(what, arg1, arg2, obj); - track.mNativeEventHandler.sendMessage(m); + if (track.mEventHandlerDelegate != null) { + Message m = + track.mEventHandlerDelegate.getHandler().obtainMessage(what, arg1, arg2, obj); + track.mEventHandlerDelegate.getHandler().sendMessage(m); } } diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp index 5562254..707db02 100644 --- a/media/jni/android_media_MediaPlayer.cpp +++ b/media/jni/android_media_MediaPlayer.cpp @@ -29,6 +29,7 @@ #include "jni.h" #include "JNIHelp.h" #include "android_runtime/AndroidRuntime.h" +#include "utils/Errors.h" // for status_t // ---------------------------------------------------------------------------- @@ -171,6 +172,7 @@ android_media_MediaPlayer_setDataSource(JNIEnv *env, jobject thiz, jstring path) jniThrowException(env, "java/lang/RuntimeException", "Out of memory"); return; } + LOGV("setDataSource: path %s", pathStr); status_t opStatus = mp->setDataSource(pathStr); // Make sure that local ref is released before a potential exception @@ -192,6 +194,7 @@ android_media_MediaPlayer_setDataSourceFD(JNIEnv *env, jobject thiz, jobject fil return; } int fd = getParcelFileDescriptorFD(env, fileDescriptor); + LOGV("setDataSourceFD: fd %d", fd); process_media_player_call( env, thiz, mp->setDataSource(fd, offset, length), "java/io/IOException", "setDataSourceFD failed." ); } @@ -207,8 +210,8 @@ android_media_MediaPlayer_prepare(JNIEnv *env, jobject thiz) jobject surface = env->GetObjectField(thiz, fields.surface); if (surface != NULL) { const sp<Surface>& native_surface = get_surface(env, surface); - //LOGI("prepare: surface=%p (id=%d)", - // native_surface.get(), native_surface->ID()); + LOGV("prepare: surface=%p (id=%d)", + native_surface.get(), native_surface->ID()); mp->setVideoSurface(native_surface); } process_media_player_call( env, thiz, mp->prepare(), "java/io/IOException", "Prepare failed." ); @@ -225,8 +228,8 @@ android_media_MediaPlayer_prepareAsync(JNIEnv *env, jobject thiz) jobject surface = env->GetObjectField(thiz, fields.surface); if (surface != NULL) { const sp<Surface>& native_surface = get_surface(env, surface); - LOGI("prepareAsync: surface=%p (id=%d)", - native_surface.get(), native_surface->ID()); + LOGV("prepareAsync: surface=%p (id=%d)", + native_surface.get(), native_surface->ID()); mp->setVideoSurface(native_surface); } process_media_player_call( env, thiz, mp->prepareAsync(), "java/io/IOException", "Prepare Async failed." ); @@ -235,6 +238,7 @@ android_media_MediaPlayer_prepareAsync(JNIEnv *env, jobject thiz) static void android_media_MediaPlayer_start(JNIEnv *env, jobject thiz) { + LOGV("start"); sp<MediaPlayer> mp = getMediaPlayer(env, thiz); if (mp == NULL ) { jniThrowException(env, "java/lang/IllegalStateException", NULL); @@ -246,6 +250,7 @@ android_media_MediaPlayer_start(JNIEnv *env, jobject thiz) static void android_media_MediaPlayer_stop(JNIEnv *env, jobject thiz) { + LOGV("stop"); sp<MediaPlayer> mp = getMediaPlayer(env, thiz); if (mp == NULL ) { jniThrowException(env, "java/lang/IllegalStateException", NULL); @@ -257,6 +262,7 @@ android_media_MediaPlayer_stop(JNIEnv *env, jobject thiz) static void android_media_MediaPlayer_pause(JNIEnv *env, jobject thiz) { + LOGV("pause"); sp<MediaPlayer> mp = getMediaPlayer(env, thiz); if (mp == NULL ) { jniThrowException(env, "java/lang/IllegalStateException", NULL); @@ -273,7 +279,10 @@ android_media_MediaPlayer_isPlaying(JNIEnv *env, jobject thiz) jniThrowException(env, "java/lang/IllegalStateException", NULL); return false; } - return mp->isPlaying(); + const jboolean is_playing = mp->isPlaying(); + + LOGV("isPlaying: %d", is_playing); + return is_playing; } static void @@ -284,6 +293,7 @@ android_media_MediaPlayer_seekTo(JNIEnv *env, jobject thiz, int msec) jniThrowException(env, "java/lang/IllegalStateException", NULL); return; } + LOGV("seekTo: %d(msec)", msec); process_media_player_call( env, thiz, mp->seekTo(msec), NULL, NULL ); } @@ -296,9 +306,12 @@ android_media_MediaPlayer_getVideoWidth(JNIEnv *env, jobject thiz) return 0; } int w; - if (0 == mp->getVideoWidth(&w)) - return w; - return 0; + if (0 != mp->getVideoWidth(&w)) { + LOGE("getVideoWidth failed"); + w = 0; + } + LOGV("getVideoWidth: %d", w); + return w; } static int @@ -310,9 +323,12 @@ android_media_MediaPlayer_getVideoHeight(JNIEnv *env, jobject thiz) return 0; } int h; - if (0 == mp->getVideoHeight(&h)) - return h; - return 0; + if (0 != mp->getVideoHeight(&h)) { + LOGE("getVideoHeight failed"); + h = 0; + } + LOGV("getVideoHeight: %d", h); + return h; } @@ -326,6 +342,7 @@ android_media_MediaPlayer_getCurrentPosition(JNIEnv *env, jobject thiz) } int msec; process_media_player_call( env, thiz, mp->getCurrentPosition(&msec), NULL, NULL ); + LOGV("getCurrentPosition: %d (msec)", msec); return msec; } @@ -339,12 +356,14 @@ android_media_MediaPlayer_getDuration(JNIEnv *env, jobject thiz) } int msec; process_media_player_call( env, thiz, mp->getDuration(&msec), NULL, NULL ); + LOGV("getDuration: %d (msec)", msec); return msec; } static void android_media_MediaPlayer_reset(JNIEnv *env, jobject thiz) { + LOGV("reset"); sp<MediaPlayer> mp = getMediaPlayer(env, thiz); if (mp == NULL ) { jniThrowException(env, "java/lang/IllegalStateException", NULL); @@ -356,6 +375,7 @@ android_media_MediaPlayer_reset(JNIEnv *env, jobject thiz) static void android_media_MediaPlayer_setAudioStreamType(JNIEnv *env, jobject thiz, int streamtype) { + LOGV("setAudioStreamType: %d", streamtype); sp<MediaPlayer> mp = getMediaPlayer(env, thiz); if (mp == NULL ) { jniThrowException(env, "java/lang/IllegalStateException", NULL); @@ -367,6 +387,7 @@ android_media_MediaPlayer_setAudioStreamType(JNIEnv *env, jobject thiz, int stre static void android_media_MediaPlayer_setLooping(JNIEnv *env, jobject thiz, jboolean looping) { + LOGV("setLooping: %d", looping); sp<MediaPlayer> mp = getMediaPlayer(env, thiz); if (mp == NULL ) { jniThrowException(env, "java/lang/IllegalStateException", NULL); @@ -378,6 +399,7 @@ android_media_MediaPlayer_setLooping(JNIEnv *env, jobject thiz, jboolean looping static jboolean android_media_MediaPlayer_isLooping(JNIEnv *env, jobject thiz) { + LOGV("isLooping"); sp<MediaPlayer> mp = getMediaPlayer(env, thiz); if (mp == NULL ) { jniThrowException(env, "java/lang/IllegalStateException", NULL); @@ -389,6 +411,7 @@ android_media_MediaPlayer_isLooping(JNIEnv *env, jobject thiz) static void android_media_MediaPlayer_setVolume(JNIEnv *env, jobject thiz, float leftVolume, float rightVolume) { + LOGV("setVolume: left %f right %f", leftVolume, rightVolume); sp<MediaPlayer> mp = getMediaPlayer(env, thiz); if (mp == NULL ) { jniThrowException(env, "java/lang/IllegalStateException", NULL); @@ -570,4 +593,3 @@ bail: } // KTHXBYE - diff --git a/media/jni/android_media_MediaRecorder.cpp b/media/jni/android_media_MediaRecorder.cpp index 44f875c..5f6f754 100644 --- a/media/jni/android_media_MediaRecorder.cpp +++ b/media/jni/android_media_MediaRecorder.cpp @@ -313,6 +313,7 @@ android_media_MediaRecorder_release(JNIEnv *env, jobject thiz) sp<MediaRecorder> mr = setMediaRecorder(env, thiz, 0); if (mr != NULL) { mr->setListener(NULL); + mr->release(); } } diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp index e79f336..d26b0c5 100644 --- a/media/libmedia/AudioTrack.cpp +++ b/media/libmedia/AudioTrack.cpp @@ -808,7 +808,14 @@ bool AudioTrack::processAudioBuffer(const sp<AudioTrackThread>& thread) writtenSize = audioBuffer.size; // Sanity check on returned size - if (ssize_t(writtenSize) <= 0) break; + if (ssize_t(writtenSize) <= 0) { + // The callback is done filling buffers + // Keep this thread going to handle timed events and + // still try to get more data in intervals of WAIT_PERIOD_MS + // but don't just loop and block the CPU, so wait + usleep(WAIT_PERIOD_MS*1000); + break; + } if (writtenSize > reqSize) writtenSize = reqSize; if (mFormat == AudioSystem::PCM_8_BIT) { diff --git a/media/libmedia/mediarecorder.cpp b/media/libmedia/mediarecorder.cpp index 98aac39..5eba0ef 100644 --- a/media/libmedia/mediarecorder.cpp +++ b/media/libmedia/mediarecorder.cpp @@ -42,7 +42,7 @@ status_t MediaRecorder::setCamera(const sp<ICamera>& camera) if (OK != ret) { LOGV("setCamera failed: %d", ret); mCurrentState = MEDIA_RECORDER_ERROR; - return UNKNOWN_ERROR; + return ret; } return ret; } @@ -67,7 +67,7 @@ status_t MediaRecorder::setPreviewSurface(const sp<Surface>& surface) if (OK != ret) { LOGV("setPreviewSurface failed: %d", ret); mCurrentState = MEDIA_RECORDER_ERROR; - return UNKNOWN_ERROR; + return ret; } return ret; } @@ -88,14 +88,14 @@ status_t MediaRecorder::init() if (OK != ret) { LOGV("init failed: %d", ret); mCurrentState = MEDIA_RECORDER_ERROR; - return UNKNOWN_ERROR; + return ret; } ret = mMediaRecorder->setListener(this); if (OK != ret) { LOGV("setListener failed: %d", ret); mCurrentState = MEDIA_RECORDER_ERROR; - return UNKNOWN_ERROR; + return ret; } mCurrentState = MEDIA_RECORDER_INITIALIZED; @@ -129,7 +129,7 @@ status_t MediaRecorder::setVideoSource(int vs) if (OK != ret) { LOGV("setVideoSource failed: %d", ret); mCurrentState = MEDIA_RECORDER_ERROR; - return UNKNOWN_ERROR; + return ret; } mIsVideoSourceSet = true; return ret; @@ -162,7 +162,7 @@ status_t MediaRecorder::setAudioSource(int as) if (OK != ret) { LOGV("setAudioSource failed: %d", ret); mCurrentState = MEDIA_RECORDER_ERROR; - return UNKNOWN_ERROR; + return ret; } mIsAudioSourceSet = true; return ret; @@ -188,7 +188,7 @@ status_t MediaRecorder::setOutputFormat(int of) if (OK != ret) { LOGE("setOutputFormat failed: %d", ret); mCurrentState = MEDIA_RECORDER_ERROR; - return UNKNOWN_ERROR; + return ret; } mCurrentState = MEDIA_RECORDER_DATASOURCE_CONFIGURED; return ret; @@ -218,7 +218,7 @@ status_t MediaRecorder::setVideoEncoder(int ve) if (OK != ret) { LOGV("setVideoEncoder failed: %d", ret); mCurrentState = MEDIA_RECORDER_ERROR; - return UNKNOWN_ERROR; + return ret; } mIsVideoEncoderSet = true; return ret; @@ -248,7 +248,7 @@ status_t MediaRecorder::setAudioEncoder(int ae) if (OK != ret) { LOGV("setAudioEncoder failed: %d", ret); mCurrentState = MEDIA_RECORDER_ERROR; - return UNKNOWN_ERROR; + return ret; } mIsAudioEncoderSet = true; return ret; @@ -274,7 +274,7 @@ status_t MediaRecorder::setOutputFile(const char* path) if (OK != ret) { LOGV("setOutputFile failed: %d", ret); mCurrentState = MEDIA_RECORDER_ERROR; - return UNKNOWN_ERROR; + return ret; } mIsOutputFileSet = true; return ret; @@ -300,7 +300,7 @@ status_t MediaRecorder::setOutputFile(int fd, int64_t offset, int64_t length) if (OK != ret) { LOGV("setOutputFile failed: %d", ret); mCurrentState = MEDIA_RECORDER_ERROR; - return UNKNOWN_ERROR; + return ret; } mIsOutputFileSet = true; return ret; @@ -326,7 +326,7 @@ status_t MediaRecorder::setVideoSize(int width, int height) if (OK != ret) { LOGE("setVideoSize failed: %d", ret); mCurrentState = MEDIA_RECORDER_ERROR; - return UNKNOWN_ERROR; + return ret; } return ret; } @@ -351,7 +351,7 @@ status_t MediaRecorder::setVideoFrameRate(int frames_per_second) if (OK != ret) { LOGE("setVideoFrameRate failed: %d", ret); mCurrentState = MEDIA_RECORDER_ERROR; - return UNKNOWN_ERROR; + return ret; } return ret; } @@ -389,7 +389,7 @@ status_t MediaRecorder::prepare() if (OK != ret) { LOGE("prepare failed: %d", ret); mCurrentState = MEDIA_RECORDER_ERROR; - return UNKNOWN_ERROR; + return ret; } mCurrentState = MEDIA_RECORDER_PREPARED; return ret; @@ -411,7 +411,7 @@ status_t MediaRecorder::getMaxAmplitude(int* max) if (OK != ret) { LOGE("getMaxAmplitude failed: %d", ret); mCurrentState = MEDIA_RECORDER_ERROR; - return UNKNOWN_ERROR; + return ret; } return ret; } @@ -432,7 +432,7 @@ status_t MediaRecorder::start() if (OK != ret) { LOGE("start failed: %d", ret); mCurrentState = MEDIA_RECORDER_ERROR; - return UNKNOWN_ERROR; + return ret; } mCurrentState = MEDIA_RECORDER_RECORDING; return ret; @@ -454,7 +454,7 @@ status_t MediaRecorder::stop() if (OK != ret) { LOGE("stop failed: %d", ret); mCurrentState = MEDIA_RECORDER_ERROR; - return UNKNOWN_ERROR; + return ret; } mCurrentState = MEDIA_RECORDER_IDLE; return ret; @@ -522,7 +522,7 @@ status_t MediaRecorder::doReset() if (OK != ret) { LOGE("doReset failed: %d", ret); mCurrentState = MEDIA_RECORDER_ERROR; - return UNKNOWN_ERROR; + return ret; } else { mCurrentState = MEDIA_RECORDER_INITIALIZED; } diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java index 73688cc..3c449c9 100755 --- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java +++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java @@ -49,7 +49,7 @@ public class MediaFrameworkTestRunner extends InstrumentationTestRunner { suite.addTestSuite(MediaMetadataTest.class); suite.addTestSuite(CameraTest.class); suite.addTestSuite(MediaRecorderTest.class); - //suite.addTestSuite(MediaAudioTrackTest.class); + suite.addTestSuite(MediaAudioTrackTest.class); return suite; } diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CameraTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CameraTest.java index 59803f7..c30db38 100644 --- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CameraTest.java +++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CameraTest.java @@ -100,6 +100,12 @@ public class CameraTest extends ActivityInstrumentationTestCase<MediaFrameworkTe */ private void terminateMessageLooper() { mLooper.quit(); + //TODO yslau : take out the sleep until bug#1693519 fix + try { + Thread.sleep(1000); + } catch (Exception e){ + Log.v(TAG, e.toString()); + } mCamera.release(); } diff --git a/packages/SettingsProvider/etc/favorites.xml b/packages/SettingsProvider/etc/favorites.xml index 0ecf8a6..ae74b8e 100644 --- a/packages/SettingsProvider/etc/favorites.xml +++ b/packages/SettingsProvider/etc/favorites.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2007 The Android Open Source Project +<!-- 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. @@ -19,4 +19,5 @@ <favorite package="com.android.contacts" class="com.android.contacts.DialtactsContactsEntryActivity" screen="1" x="1" y="3" /> <favorite package="com.android.browser" class="com.android.browser.BrowserActivity" screen="1" x="2" y="3" /> <favorite package="com.google.android.apps.maps" class="com.google.android.maps.MapsActivity" screen="1" x="3" y="3" /> + <favorite package="com.android.vending" class="com.android.vending.AssetBrowserActivity" screen="1" x="0" y="2" /> </favorites> diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java index f8b5700..2f32ab7 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java @@ -63,7 +63,7 @@ class DatabaseHelper extends SQLiteOpenHelper { private static final String TAG = "SettingsProvider"; private static final String DATABASE_NAME = "settings.db"; - private static final int DATABASE_VERSION = 33; + private static final int DATABASE_VERSION = 34; private Context mContext; @@ -370,6 +370,18 @@ class DatabaseHelper extends SQLiteOpenHelper { } upgradeVersion = 33; } + + if (upgradeVersion == 33) { + // Set the default zoom controls to: tap-twice to bring up +/- + db.beginTransaction(); + try { + db.execSQL("INSERT INTO system(name,value) values('zoom','2');"); + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + upgradeVersion = 34; + } if (upgradeVersion != currentVersion) { Log.w(TAG, "Got stuck trying to upgrade from version " + upgradeVersion diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java index 4b45828..a254081 100644 --- a/services/java/com/android/server/InputMethodManagerService.java +++ b/services/java/com/android/server/InputMethodManagerService.java @@ -54,6 +54,7 @@ import android.os.IInterface; import android.os.Message; import android.os.Parcel; import android.os.RemoteException; +import android.os.ResultReceiver; import android.os.ServiceManager; import android.os.SystemClock; import android.provider.Settings; @@ -619,7 +620,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } if (mShowRequested) { if (DEBUG) Log.v(TAG, "Attach new input asks to show input"); - showCurrentInputLocked(getAppShowFlags()); + showCurrentInputLocked(getAppShowFlags(), null); } return needResult ? new InputBindResult(session.session, mCurId, mCurSeq) @@ -908,7 +909,8 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } } - public void showSoftInput(IInputMethodClient client, int flags) { + public boolean showSoftInput(IInputMethodClient client, int flags, + ResultReceiver resultReceiver) { long ident = Binder.clearCallingIdentity(); try { synchronized (mMethodMap) { @@ -920,21 +922,22 @@ public class InputMethodManagerService extends IInputMethodManager.Stub // be made before input is started in it. if (!mIWindowManager.inputMethodClientHasFocus(client)) { Log.w(TAG, "Ignoring showSoftInput of: " + client); - return; + return false; } } catch (RemoteException e) { + return false; } } if (DEBUG) Log.v(TAG, "Client requesting input be shown"); - showCurrentInputLocked(flags); + return showCurrentInputLocked(flags, resultReceiver); } } finally { Binder.restoreCallingIdentity(ident); } } - void showCurrentInputLocked(int flags) { + boolean showCurrentInputLocked(int flags, ResultReceiver resultReceiver) { mShowRequested = true; if ((flags&InputMethodManager.SHOW_IMPLICIT) == 0) { mShowExplicitlyRequested = true; @@ -943,10 +946,13 @@ public class InputMethodManagerService extends IInputMethodManager.Stub mShowExplicitlyRequested = true; mShowForced = true; } + boolean res = false; if (mCurMethod != null) { - executeOrSendMessage(mCurMethod, mCaller.obtainMessageIO( - MSG_SHOW_SOFT_INPUT, getImeShowFlags(), mCurMethod)); + executeOrSendMessage(mCurMethod, mCaller.obtainMessageIOO( + MSG_SHOW_SOFT_INPUT, getImeShowFlags(), mCurMethod, + resultReceiver)); mInputShown = true; + res = true; } else if (mHaveConnection && SystemClock.uptimeMillis() < (mLastBindTime+TIME_TO_RECONNECT)) { // The client has asked to have the input method shown, but @@ -958,9 +964,12 @@ public class InputMethodManagerService extends IInputMethodManager.Stub mContext.unbindService(this); mContext.bindService(mCurIntent, this, Context.BIND_AUTO_CREATE); } + + return res; } - public void hideSoftInput(IInputMethodClient client, int flags) { + public boolean hideSoftInput(IInputMethodClient client, int flags, + ResultReceiver resultReceiver) { long ident = Binder.clearCallingIdentity(); try { synchronized (mMethodMap) { @@ -972,40 +981,46 @@ public class InputMethodManagerService extends IInputMethodManager.Stub // be made before input is started in it. if (!mIWindowManager.inputMethodClientHasFocus(client)) { Log.w(TAG, "Ignoring hideSoftInput of: " + client); - return; + return false; } } catch (RemoteException e) { + return false; } } if (DEBUG) Log.v(TAG, "Client requesting input be hidden"); - hideCurrentInputLocked(flags); + return hideCurrentInputLocked(flags, resultReceiver); } } finally { Binder.restoreCallingIdentity(ident); } } - void hideCurrentInputLocked(int flags) { + boolean hideCurrentInputLocked(int flags, ResultReceiver resultReceiver) { if ((flags&InputMethodManager.HIDE_IMPLICIT_ONLY) != 0 && (mShowExplicitlyRequested || mShowForced)) { if (DEBUG) Log.v(TAG, "Not hiding: explicit show not cancelled by non-explicit hide"); - return; + return false; } if (mShowForced && (flags&InputMethodManager.HIDE_NOT_ALWAYS) != 0) { if (DEBUG) Log.v(TAG, "Not hiding: forced show not cancelled by not-always hide"); - return; + return false; } + boolean res; if (mInputShown && mCurMethod != null) { - executeOrSendMessage(mCurMethod, mCaller.obtainMessageO( - MSG_HIDE_SOFT_INPUT, mCurMethod)); + executeOrSendMessage(mCurMethod, mCaller.obtainMessageOO( + MSG_HIDE_SOFT_INPUT, mCurMethod, resultReceiver)); + res = true; + } else { + res = false; } mInputShown = false; mShowRequested = false; mShowExplicitlyRequested = false; mShowForced = false; + return res; } public void windowGainedFocus(IInputMethodClient client, @@ -1045,7 +1060,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub // be behind any soft input window, so hide the // soft input window if it is shown. if (DEBUG) Log.v(TAG, "Unspecified window will hide input"); - hideCurrentInputLocked(InputMethodManager.HIDE_NOT_ALWAYS); + hideCurrentInputLocked(InputMethodManager.HIDE_NOT_ALWAYS, null); } } else if (isTextEditor && (softInputMode & WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST) @@ -1055,7 +1070,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub // There is a focus view, and we are navigating forward // into the window, so show the input window for the user. if (DEBUG) Log.v(TAG, "Unspecified window will show input"); - showCurrentInputLocked(InputMethodManager.SHOW_IMPLICIT); + showCurrentInputLocked(InputMethodManager.SHOW_IMPLICIT, null); } break; case WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED: @@ -1065,23 +1080,23 @@ public class InputMethodManagerService extends IInputMethodManager.Stub if ((softInputMode & WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION) != 0) { if (DEBUG) Log.v(TAG, "Window asks to hide input going forward"); - hideCurrentInputLocked(0); + hideCurrentInputLocked(0, null); } break; case WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN: if (DEBUG) Log.v(TAG, "Window asks to hide input"); - hideCurrentInputLocked(0); + hideCurrentInputLocked(0, null); break; case WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE: if ((softInputMode & WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION) != 0) { if (DEBUG) Log.v(TAG, "Window asks to show input going forward"); - showCurrentInputLocked(InputMethodManager.SHOW_IMPLICIT); + showCurrentInputLocked(InputMethodManager.SHOW_IMPLICIT, null); } break; case WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE: if (DEBUG) Log.v(TAG, "Window asks to always show input"); - showCurrentInputLocked(InputMethodManager.SHOW_IMPLICIT); + showCurrentInputLocked(InputMethodManager.SHOW_IMPLICIT, null); break; } } @@ -1131,10 +1146,24 @@ public class InputMethodManagerService extends IInputMethodManager.Stub Log.w(TAG, "Ignoring hideInputMethod of token: " + token); return; } - long ident = Binder.clearCallingIdentity(); try { - hideCurrentInputLocked(flags); + hideCurrentInputLocked(flags, null); + } finally { + Binder.restoreCallingIdentity(ident); + } + } + } + + public void showMySoftInput(IBinder token, int flags) { + synchronized (mMethodMap) { + if (token == null || mCurToken != token) { + Log.w(TAG, "Ignoring hideInputMethod of token: " + token); + return; + } + long ident = Binder.clearCallingIdentity(); + try { + showCurrentInputLocked(flags, null); } finally { Binder.restoreCallingIdentity(ident); } @@ -1185,14 +1214,18 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } return true; case MSG_SHOW_SOFT_INPUT: + args = (HandlerCaller.SomeArgs)msg.obj; try { - ((IInputMethod)msg.obj).showSoftInput(msg.arg1); + ((IInputMethod)args.arg1).showSoftInput(msg.arg1, + (ResultReceiver)args.arg2); } catch (RemoteException e) { } return true; case MSG_HIDE_SOFT_INPUT: + args = (HandlerCaller.SomeArgs)msg.obj; try { - ((IInputMethod)msg.obj).hideSoftInput(); + ((IInputMethod)args.arg1).hideSoftInput(0, + (ResultReceiver)args.arg2); } catch (RemoteException e) { } return true; @@ -1212,7 +1245,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } catch (RemoteException e) { } return true; - // --------------------------------------------------------- case MSG_START_INPUT: @@ -1486,7 +1518,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } } } - + // ---------------------------------------------------------------------- @Override diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java index 9d69114..e48e047 100644 --- a/services/java/com/android/server/LocationManagerService.java +++ b/services/java/com/android/server/LocationManagerService.java @@ -221,6 +221,9 @@ public class LocationManagerService extends ILocationManager.Stub // Wifi Manager private WifiManager mWifiManager; + private int mNetworkState = LocationProvider.TEMPORARILY_UNAVAILABLE; + private boolean mWifiEnabled = false; + /** * A wrapper class holding either an ILocationListener or a PendingIntent to receive * location updates. @@ -597,16 +600,6 @@ public class LocationManagerService extends ILocationManager.Stub // Create a wifi lock for future use mWifiLock = getWifiWakelockLocked(); - - // There might be an existing wifi scan available - if (mWifiManager != null) { - List<ScanResult> wifiScanResults = mWifiManager.getScanResults(); - if (wifiScanResults != null && wifiScanResults.size() != 0) { - if (mNetworkLocationInterface != null) { - mNetworkLocationInterface.updateWifiScanResults(wifiScanResults); - } - } - } } public void setInstallCallback(InstallCallback callback) { @@ -625,6 +618,31 @@ public class LocationManagerService extends ILocationManager.Stub mNetworkLocationProvider = (LocationProviderImpl)provider; LocationProviderImpl.addProvider(mNetworkLocationProvider); updateProvidersLocked(); + + // notify NetworkLocationProvider of any events it might have missed + synchronized (mLocationListeners) { + mNetworkLocationProvider.updateNetworkState(mNetworkState); + mNetworkLocationInterface.updateWifiEnabledState(mWifiEnabled); + mNetworkLocationInterface.updateCellLockStatus(mCellWakeLockAcquired); + + if (mLastCellState != null) { + if (mCollector != null) { + mCollector.updateCellState(mLastCellState); + } + mNetworkLocationProvider.updateCellState(mLastCellState); + } + + // There might be an existing wifi scan available + if (mWifiManager != null) { + List<ScanResult> wifiScanResults = mWifiManager.getScanResults(); + if (wifiScanResults != null && wifiScanResults.size() != 0) { + mNetworkLocationInterface.updateWifiScanResults(wifiScanResults); + if (mCollector != null) { + mCollector.updateWifiScanResults(wifiScanResults); + } + } + } + } } } @@ -1992,12 +2010,12 @@ public class LocationManagerService extends ILocationManager.Stub } } else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { - int networkState = LocationProvider.TEMPORARILY_UNAVAILABLE; - boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); if (!noConnectivity) { - networkState = LocationProvider.AVAILABLE; + mNetworkState = LocationProvider.AVAILABLE; + } else { + mNetworkState = LocationProvider.TEMPORARILY_UNAVAILABLE; } // Notify location providers of current network state @@ -2005,7 +2023,7 @@ public class LocationManagerService extends ILocationManager.Stub List<LocationProviderImpl> providers = LocationProviderImpl.getProviders(); for (LocationProviderImpl provider : providers) { if (provider.requiresNetwork()) { - provider.updateNetworkState(networkState); + provider.updateNetworkState(mNetworkState); } } } @@ -2014,11 +2032,10 @@ public class LocationManagerService extends ILocationManager.Stub int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN); - boolean enabled; if (state == WifiManager.WIFI_STATE_ENABLED) { - enabled = true; + mWifiEnabled = true; } else if (state == WifiManager.WIFI_STATE_DISABLED) { - enabled = false; + mWifiEnabled = false; } else { return; } @@ -2026,7 +2043,7 @@ public class LocationManagerService extends ILocationManager.Stub // Notify network provider of current wifi enabled state synchronized (mLocationListeners) { if (mNetworkLocationInterface != null) { - mNetworkLocationInterface.updateWifiEnabledState(enabled); + mNetworkLocationInterface.updateWifiEnabledState(mWifiEnabled); } } diff --git a/services/java/com/android/server/SensorService.java b/services/java/com/android/server/SensorService.java index 29b45ab..b253038 100644 --- a/services/java/com/android/server/SensorService.java +++ b/services/java/com/android/server/SensorService.java @@ -45,7 +45,7 @@ class SensorService extends ISensorService.Stub { private static final int SENSOR_DISABLE = -1; /** - * Battery statistics to be updated when sensors are enabled and diabled. + * Battery statistics to be updated when sensors are enabled and disabled. */ final IBatteryStats mBatteryStats = BatteryStatsService.getService(); @@ -119,7 +119,10 @@ class SensorService extends ISensorService.Stub { } Binder.restoreCallingIdentity(identity); - if (binder == null) throw new NullPointerException("listener is null in enableSensor"); + if (binder == null) { + Log.w(TAG, "listener is null (sensor=" + name + ", id=" + sensor + ")"); + return false; + } synchronized(mListeners) { if (enable!=SENSOR_DISABLE && !_sensors_control_activate(sensor, true)) { @@ -145,7 +148,11 @@ class SensorService extends ISensorService.Stub { } if (l == null) { - throw new NullPointerException("no Listener object in enableSensor"); + // by construction, this means we're disabling a listener we + // don't know about... + Log.w(TAG, "listener with binder " + binder + + ", doesn't exist (sensor=" + name + ", id=" + sensor + ")"); + return false; } if (minDelay >= 0) { diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java index 21e5ee1..cb16c98 100644 --- a/services/java/com/android/server/WindowManagerService.java +++ b/services/java/com/android/server/WindowManagerService.java @@ -2076,6 +2076,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo int curGroup = 0; int lastOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; boolean haveGroup = false; + boolean lastFullscreen = false; while (pos >= 0) { AppWindowToken wtoken = mAppTokens.get(pos); pos--; @@ -2090,16 +2091,19 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo } else if (curGroup != wtoken.groupId) { // If we have hit a new application group, and the bottom // of the previous group didn't explicitly say to use - // the orientation behind it, then we'll stick with the + // the orientation behind it, and the last app was + // full screen, then we'll stick with the // user's orientation. - if (lastOrientation != ActivityInfo.SCREEN_ORIENTATION_BEHIND) { + if (lastOrientation != ActivityInfo.SCREEN_ORIENTATION_BEHIND + && lastFullscreen) { return lastOrientation; } } int or = wtoken.requestedOrientation; // If this application is fullscreen, then just take whatever // orientation it has and ignores whatever is under it. - if (wtoken.appFullscreen) { + lastFullscreen = wtoken.appFullscreen; + if (lastFullscreen) { return or; } // If this application has requested an explicit orientation, diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 141569e..2ede783 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -263,6 +263,11 @@ public final class ActivityManagerService extends ActivityManagerNative implemen final int HIDDEN_APP_MAX_ADJ; static int HIDDEN_APP_MIN_ADJ; + // This is a process holding the home application -- we want to try + // avoiding killing it, even if it would normally be in the background, + // because the user interacts with it so much. + final int HOME_APP_ADJ; + // This is a process holding a secondary server -- killing it will not // have much of an impact as far as the user is concerned. Value set in // system/rootdir/init.rc on startup. @@ -290,6 +295,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen // Corresponding memory levels for above adjustments. final int EMPTY_APP_MEM; final int HIDDEN_APP_MEM; + final int HOME_APP_MEM; final int SECONDARY_SERVER_MEM; final int VISIBLE_APP_MEM; final int FOREGROUND_APP_MEM; @@ -487,6 +493,12 @@ public final class ActivityManagerService extends ActivityManagerNative implemen = new ArrayList<ProcessRecord>(); /** + * This is the process holding what we currently consider to be + * the "home" activity. + */ + private ProcessRecord mHomeProcess; + + /** * List of running activities, sorted by recent usage. * The first entry in the list is the least recently used. * It contains HistoryRecord objects. @@ -871,6 +883,11 @@ public final class ActivityManagerService extends ActivityManagerNative implemen Log.e(TAG, "App already has anr dialog: " + proc); return; } + + broadcastIntentLocked(null, null, new Intent("android.intent.action.ANR"), + null, null, 0, null, null, null, + false, false, MY_PID, Process.SYSTEM_UID); + Dialog d = new AppNotRespondingDialog(ActivityManagerService.this, mContext, proc, (HistoryRecord)data.get("activity")); d.show(); @@ -1267,6 +1284,8 @@ public final class ActivityManagerService extends ActivityManagerNative implemen Integer.valueOf(SystemProperties.get("ro.VISIBLE_APP_ADJ")); SECONDARY_SERVER_ADJ = Integer.valueOf(SystemProperties.get("ro.SECONDARY_SERVER_ADJ")); + HOME_APP_ADJ = + Integer.valueOf(SystemProperties.get("ro.HOME_APP_ADJ")); HIDDEN_APP_MIN_ADJ = Integer.valueOf(SystemProperties.get("ro.HIDDEN_APP_MIN_ADJ")); CONTENT_PROVIDER_ADJ = @@ -1280,6 +1299,8 @@ public final class ActivityManagerService extends ActivityManagerNative implemen Integer.valueOf(SystemProperties.get("ro.VISIBLE_APP_MEM"))*PAGE_SIZE; SECONDARY_SERVER_MEM = Integer.valueOf(SystemProperties.get("ro.SECONDARY_SERVER_MEM"))*PAGE_SIZE; + HOME_APP_MEM = + Integer.valueOf(SystemProperties.get("ro.HOME_APP_MEM"))*PAGE_SIZE; HIDDEN_APP_MEM = Integer.valueOf(SystemProperties.get("ro.HIDDEN_APP_MEM"))*PAGE_SIZE; EMPTY_APP_MEM = @@ -1548,6 +1569,9 @@ public final class ActivityManagerService extends ActivityManagerNative implemen System.identityHashCode(r), r.task.taskId, r.shortComponentName); } + if (r.isHomeActivity) { + mHomeProcess = app; + } app.thread.scheduleLaunchActivity(new Intent(r.intent), r, r.info, r.icicle, results, newIntents, !andResume, isNextTransitionForward()); @@ -2188,7 +2212,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen if (app == null || app.instrumentationClass == null) { intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK); startActivityLocked(null, intent, null, null, 0, aInfo, - null, null, 0, 0, 0, false); + null, null, 0, 0, 0, false, false); } } return true; @@ -2669,7 +2693,8 @@ public final class ActivityManagerService extends ActivityManagerNative implemen Uri[] grantedUriPermissions, int grantedMode, ActivityInfo aInfo, IBinder resultTo, String resultWho, int requestCode, - int callingPid, int callingUid, boolean onlyIfNeeded) { + int callingPid, int callingUid, boolean onlyIfNeeded, + boolean componentSpecified) { Log.i(TAG, "Starting activity: " + intent); HistoryRecord sourceRecord = null; @@ -2784,7 +2809,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen HistoryRecord r = new HistoryRecord(this, callerApp, callingUid, intent, resolvedType, aInfo, mConfiguration, - resultRecord, resultWho, requestCode); + resultRecord, resultWho, requestCode, componentSpecified); r.startTime = SystemClock.uptimeMillis(); HistoryRecord notTop = (launchFlags&Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP) @@ -3118,6 +3143,8 @@ public final class ActivityManagerService extends ActivityManagerNative implemen throw new IllegalArgumentException("File descriptors passed in Intent"); } + final boolean componentSpecified = intent.getComponent() != null; + // Don't modify the client's object! intent = new Intent(intent); @@ -3157,7 +3184,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen int res = startActivityLocked(caller, intent, resolvedType, grantedUriPermissions, grantedMode, aInfo, resultTo, resultWho, requestCode, -1, -1, - onlyIfNeeded); + onlyIfNeeded, componentSpecified); Binder.restoreCallingIdentity(origId); return res; } @@ -3247,7 +3274,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen // those are not yet exposed to user code, so there is no need. int res = startActivityLocked(r.app.thread, intent, r.resolvedType, null, 0, aInfo, resultTo, resultWho, - requestCode, -1, r.launchedFromUid, false); + requestCode, -1, r.launchedFromUid, false, false); Binder.restoreCallingIdentity(origId); r.finishing = wasFinishing; @@ -3261,6 +3288,8 @@ public final class ActivityManagerService extends ActivityManagerNative implemen final int startActivityInPackage(int uid, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, boolean onlyIfNeeded) { + final boolean componentSpecified = intent.getComponent() != null; + // Don't modify the client's object! intent = new Intent(intent); @@ -3291,7 +3320,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen synchronized(this) { return startActivityLocked(null, intent, resolvedType, null, 0, aInfo, resultTo, resultWho, requestCode, -1, uid, - onlyIfNeeded); + onlyIfNeeded, componentSpecified); } } @@ -5678,9 +5707,9 @@ public final class ActivityManagerService extends ActivityManagerNative implemen public void getMemoryInfo(ActivityManager.MemoryInfo outInfo) { outInfo.availMem = Process.getFreeMemory(); - outInfo.threshold = SECONDARY_SERVER_MEM; + outInfo.threshold = HOME_APP_MEM; outInfo.lowMemory = outInfo.availMem < - (SECONDARY_SERVER_MEM + ((HIDDEN_APP_MEM-SECONDARY_SERVER_MEM)/2)); + (HOME_APP_MEM + ((HIDDEN_APP_MEM-HOME_APP_MEM)/2)); } // ========================================================= @@ -7798,7 +7827,10 @@ public final class ActivityManagerService extends ActivityManagerNative implemen currApp.importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_EMPTY; } else if (adj >= HIDDEN_APP_MIN_ADJ) { currApp.importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND; - currApp.lru = adj - HIDDEN_APP_MIN_ADJ; + currApp.lru = adj - HIDDEN_APP_MIN_ADJ + 1; + } else if (adj >= HOME_APP_ADJ) { + currApp.importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND; + currApp.lru = 0; } else if (adj >= SECONDARY_SERVER_ADJ) { currApp.importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_SERVICE; } else if (adj >= VISIBLE_APP_ADJ) { @@ -7997,6 +8029,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen pw.println(" "); pw.println(" Total persistent processes: " + numPers); + pw.println(" mHomeProcess: " + mHomeProcess); pw.println(" mConfiguration: " + mConfiguration); pw.println(" mStartRunning=" + mStartRunning + " mSystemReady=" + mSystemReady @@ -8680,6 +8713,10 @@ public final class ActivityManagerService extends ActivityManagerNative implemen } mProcessesOnHold.remove(app); + if (app == mHomeProcess) { + mHomeProcess = null; + } + if (restart) { // We have components that still need to be running in the // process, so re-launch it. @@ -11185,9 +11222,8 @@ public final class ActivityManagerService extends ActivityManagerNative implemen app.isForeground = false; - // Right now there are three interesting states: it is - // either the foreground app, background with activities, - // or background without activities. + // Determine the importance of the process, starting with most + // important to least, and assign an appropriate OOM adjustment. int adj; int N; if (app == TOP_APP || app.instrumentationClass != null @@ -11207,6 +11243,10 @@ public final class ActivityManagerService extends ActivityManagerNative implemen } else if (app.foregroundServices || app.forcingToForeground != null) { // The user is aware of this app, so make it visible. adj = VISIBLE_APP_ADJ; + } else if (app == mHomeProcess) { + // This process is hosting what we currently consider to be the + // home app, so we don't want to let it go into the background. + adj = HOME_APP_ADJ; } else if ((N=app.activities.size()) != 0) { // This app is in the background with paused activities. adj = hiddenAdj; @@ -11222,7 +11262,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen adj = EMPTY_APP_ADJ; } - // By default, we use the computed adjusted. It may be changed if + // By default, we use the computed adjustment. It may be changed if // there are applications dependent on our services or providers, but // this gives us a baseline and makes sure we don't get into an // infinite recursion. diff --git a/services/java/com/android/server/am/HistoryRecord.java b/services/java/com/android/server/am/HistoryRecord.java index b407208..0f62471 100644 --- a/services/java/com/android/server/am/HistoryRecord.java +++ b/services/java/com/android/server/am/HistoryRecord.java @@ -55,6 +55,8 @@ class HistoryRecord extends IApplicationToken.Stub { final String taskAffinity; // as per ActivityInfo.taskAffinity final boolean stateNotNeeded; // As per ActivityInfo.flags final boolean fullscreen; // covers the full screen? + final boolean componentSpecified; // did caller specifiy an explicit component? + final boolean isHomeActivity; // do we consider this to be a home activity? final String baseDir; // where activity source (resources etc) located final String resDir; // where public activity source (public resources etc) located final String dataDir; // where activity data should go @@ -102,8 +104,8 @@ class HistoryRecord extends IApplicationToken.Stub { pw.println(prefix + this); pw.println(prefix + "packageName=" + packageName + " processName=" + processName); - pw.println(prefix + "app=" + app); - pw.println(prefix + "launchedFromUid=" + launchedFromUid); + pw.println(prefix + "launchedFromUid=" + launchedFromUid + + " app=" + app); pw.println(prefix + intent); pw.println(prefix + "frontOfTask=" + frontOfTask + " task=" + task); pw.println(prefix + "taskAffinity=" + taskAffinity); @@ -112,6 +114,9 @@ class HistoryRecord extends IApplicationToken.Stub { pw.println(prefix + "labelRes=0x" + Integer.toHexString(labelRes) + " icon=0x" + Integer.toHexString(icon) + " theme=0x" + Integer.toHexString(theme)); + pw.println(prefix + "stateNotNeeded=" + stateNotNeeded + + " componentSpecified=" + componentSpecified + + " isHomeActivity=" + isHomeActivity); pw.println(prefix + "configuration=" + configuration); pw.println(prefix + "resultTo=" + resultTo + " resultWho=" + resultWho + " resultCode=" + requestCode); @@ -140,13 +145,15 @@ class HistoryRecord extends IApplicationToken.Stub { HistoryRecord(ActivityManagerService _service, ProcessRecord _caller, int _launchedFromUid, Intent _intent, String _resolvedType, ActivityInfo aInfo, Configuration _configuration, - HistoryRecord _resultTo, String _resultWho, int _reqCode) { + HistoryRecord _resultTo, String _resultWho, int _reqCode, + boolean _componentSpecified) { service = _service; info = aInfo; launchedFromUid = _launchedFromUid; intent = _intent; shortComponentName = _intent.getComponent().flattenToShortString(); resolvedType = _resolvedType; + componentSpecified = _componentSpecified; configuration = _configuration; resultTo = _resultTo; resultWho = _resultWho; @@ -216,6 +223,29 @@ class HistoryRecord extends IApplicationToken.Stub { && !ent.array.getBoolean( com.android.internal.R.styleable.Window_windowIsTranslucent, false); + if (!_componentSpecified || _launchedFromUid == Process.myUid() + || _launchedFromUid == 0) { + // If we know the system has determined the component, then + // we can consider this to be a home activity... + if (Intent.ACTION_MAIN.equals(_intent.getAction()) && + _intent.hasCategory(Intent.CATEGORY_HOME) && + _intent.getCategories().size() == 1 && + _intent.getData() == null && + _intent.getType() == null && + (intent.getFlags()&Intent.FLAG_ACTIVITY_NEW_TASK) != 0 && + !"android".equals(realActivity.getClassName())) { + // This sure looks like a home activity! + // Note the last check is so we don't count the resolver + // activity as being home... really, we don't care about + // doing anything special with something that comes from + // the core framework package. + isHomeActivity = true; + } else { + isHomeActivity = false; + } + } else { + isHomeActivity = false; + } } else { realActivity = null; taskAffinity = null; @@ -226,6 +256,7 @@ class HistoryRecord extends IApplicationToken.Stub { processName = null; packageName = null; fullscreen = true; + isHomeActivity = false; } } diff --git a/telephony/java/com/android/internal/telephony/Connection.java b/telephony/java/com/android/internal/telephony/Connection.java index d53d4ab..d833810 100644 --- a/telephony/java/com/android/internal/telephony/Connection.java +++ b/telephony/java/com/android/internal/telephony/Connection.java @@ -37,7 +37,10 @@ public abstract class Connection OUT_OF_SERVICE, /* out of service */ SIM_ERROR, /* No SIM, SIM locked, or other SIM error */ CALL_BARRED, /* call was blocked by call barrring */ - FDN_BLOCKED /* call was blocked by fixed dial number */ + FDN_BLOCKED, /* call was blocked by fixed dial number */ + CS_RESTRICTED, /* call was blocked by restricted all voice access */ + CS_RESTRICTED_NORMAL,/* call was blocked by restricted normal voice access */ + CS_RESTRICTED_EMERGENCY/* call was blocked by restricted emergency voice access */ } Object userData; diff --git a/telephony/java/com/android/internal/telephony/Phone.java b/telephony/java/com/android/internal/telephony/Phone.java index 9a36bc1..adc8bc1 100644 --- a/telephony/java/com/android/internal/telephony/Phone.java +++ b/telephony/java/com/android/internal/telephony/Phone.java @@ -138,8 +138,10 @@ public interface Phone { static final String REASON_PDP_RESET = "pdpReset"; static final String REASON_VOICE_CALL_ENDED = "2GVoiceCallEnded"; static final String REASON_VOICE_CALL_STARTED = "2GVoiceCallStarted"; - - // Used for band mode selction methods + static final String REASON_PS_RESTRICT_ENABLED = "psRestrictEnabled"; + static final String REASON_PS_RESTRICT_DISABLED = "psRestrictDisabled"; + + // Used for band mode selection methods static final int BM_UNSPECIFIED = 0; // selected by baseband automatically static final int BM_EURO_BAND = 1; // GSM-900 / DCS-1800 / WCDMA-IMT-2000 static final int BM_US_BAND = 2; // GSM-850 / PCS-1900 / WCDMA-850 / WCDMA-PCS-1900 diff --git a/telephony/java/com/android/internal/telephony/gsm/BaseCommands.java b/telephony/java/com/android/internal/telephony/gsm/BaseCommands.java index 58a5bba..8e14b43 100644 --- a/telephony/java/com/android/internal/telephony/gsm/BaseCommands.java +++ b/telephony/java/com/android/internal/telephony/gsm/BaseCommands.java @@ -67,6 +67,8 @@ public abstract class BaseCommands implements CommandsInterface protected Registrant mSimRefreshRegistrant; /** Registrant for handling RING notifications */ protected Registrant mRingRegistrant; + /** Registrant for handling RESTRICTED STATE changed notification */ + protected Registrant mRestrictedStateRegistrant; public BaseCommands(Context context) { mContext = context; // May be null (if so we won't log statistics) @@ -279,6 +281,12 @@ public abstract class BaseCommands implements CommandsInterface mRingRegistrant = new Registrant (h, what, obj); } + public void + setOnRestrictedStateChanged(Handler h, int what, Object obj) + { + mRestrictedStateRegistrant = new Registrant (h, what, obj); + } + //***** Protected Methods /** * Store new RadioState and send notification based on the changes diff --git a/telephony/java/com/android/internal/telephony/gsm/CommandsInterface.java b/telephony/java/com/android/internal/telephony/gsm/CommandsInterface.java index c7b08d2..7915798 100644 --- a/telephony/java/com/android/internal/telephony/gsm/CommandsInterface.java +++ b/telephony/java/com/android/internal/telephony/gsm/CommandsInterface.java @@ -283,6 +283,17 @@ public interface CommandsInterface void setOnCallRing(Handler h, int what, Object obj); /** + * Sets the handler for RESTRICTED_STATE changed notification, + * eg, for Domain Specific Access Control + * unlike the register* methods, there's only one signal strength handler + * + * AsyncResult.result is an int[1] + * response.obj.result[0] is a bitmask of RIL_RESTRICTED_STATE_* values + */ + + void setOnRestrictedStateChanged(Handler h, int what, Object obj); + + /** * Sets the handler for Supplementary Service Notifications. * Unlike the register* methods, there's only one notification handler * diff --git a/telephony/java/com/android/internal/telephony/gsm/DataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/DataConnectionTracker.java index 4769cd1..e664bc7 100644 --- a/telephony/java/com/android/internal/telephony/gsm/DataConnectionTracker.java +++ b/telephony/java/com/android/internal/telephony/gsm/DataConnectionTracker.java @@ -172,11 +172,14 @@ final class DataConnectionTracker extends Handler private boolean[] dataEnabled = new boolean[APN_NUM_TYPES]; - // wifi connection status will be updated by sticky intent + /** wifi connection status will be updated by sticky intent */ private boolean mIsWifiConnected = false; /** Intent sent when the reconnect alarm fires. */ private PendingIntent mReconnectIntent = null; + + /** Is packet service restricted by network */ + private boolean mIsPsRestricted = false; //***** Constants @@ -249,6 +252,8 @@ final class DataConnectionTracker extends Handler static final int EVENT_START_NETSTAT_POLL = 27; static final int EVENT_START_RECOVERY = 28; static final int EVENT_APN_CHANGED = 29; + static final int EVENT_PS_RESTRICT_ENABLED = 30; + static final int EVENT_PS_RESTRICT_DISABLED = 31; BroadcastReceiver mIntentReceiver = new BroadcastReceiver () { @@ -307,6 +312,8 @@ final class DataConnectionTracker extends Handler phone.mSST.registerForGprsDetached(this, EVENT_GPRS_DETACHED, null); phone.mSST.registerForRoamingOn(this, EVENT_ROAMING_ON, null); phone.mSST.registerForRoamingOff(this, EVENT_ROAMING_OFF, null); + phone.mSST.registerForPsRestrictedEnabled(this, EVENT_PS_RESTRICT_ENABLED, null); + phone.mSST.registerForPsRestrictedDisabled(this, EVENT_PS_RESTRICT_DISABLED, null); this.netstat = INetStatService.Stub.asInterface(ServiceManager.getService("netstat")); @@ -474,6 +481,7 @@ final class DataConnectionTracker extends Handler * 2. registered to gprs service * 3. user doesn't explicitly disable data service * 4. wifi is not on + * 5. packet service is not restricted * * @return false while no data connection if all above requirements are met. */ @@ -483,7 +491,8 @@ final class DataConnectionTracker extends Handler if (phone.mSIMRecords.getRecordsLoaded() && phone.mSST.getCurrentGprsState() == ServiceState.STATE_IN_SERVICE && (!roaming || getDataOnRoamingEnabled()) && - !mIsWifiConnected ) { + !mIsWifiConnected && + !mIsPsRestricted ) { return (state == State.CONNECTED); } return true; @@ -650,6 +659,8 @@ final class DataConnectionTracker extends Handler { if (DBG) log("***trySetupData due to " + (reason == null ? "(unspecified)" : reason)); + Log.d(LOG_TAG, "[DSAC DEB] " + "trySetupData with mIsPsRestricted=" + mIsPsRestricted); + if (phone.getSimulatedRadioControl() != null) { // Assume data is connected on the simulator // FIXME this can be improved @@ -668,7 +679,8 @@ final class DataConnectionTracker extends Handler && phone.mSIMRecords.getRecordsLoaded() && ( phone.mSST.isConcurrentVoiceAndData() || phone.getState() == Phone.State.IDLE ) - && isDataAllowed()) { + && isDataAllowed() + && !mIsPsRestricted ) { if (state == State.IDLE) { waitingApns = buildWaitingApns(); @@ -695,7 +707,8 @@ final class DataConnectionTracker extends Handler " phoneState=" + phone.getState() + " dataEnabled=" + getAnyDataEnabled() + " roaming=" + roaming + - " dataOnRoamingEnable=" + getDataOnRoamingEnabled()); + " dataOnRoamingEnable=" + getDataOnRoamingEnabled() + + " ps restricted=" + mIsPsRestricted); return false; } } @@ -1279,7 +1292,8 @@ final class DataConnectionTracker extends Handler boolean retry = true; if ( Phone.REASON_RADIO_TURNED_OFF.equals(reason) || - Phone.REASON_DATA_DISABLED.equals(reason) ) { + Phone.REASON_DATA_DISABLED.equals(reason) || + Phone.REASON_PS_RESTRICT_ENABLED.equals(reason)) { retry = false; } return retry; @@ -1571,6 +1585,37 @@ final class DataConnectionTracker extends Handler case EVENT_APN_CHANGED: onApnChanged(); break; + + case EVENT_PS_RESTRICT_ENABLED: + /** + * We don't need to explicitly to tear down the PDP context + * when PS restricted is enabled. The base band will deactive + * PDP context and notify us with PDP_CONTEXT_CHANGED. + * But we should stop the network polling and prevent reset PDP. + */ + Log.d(LOG_TAG, "[DSAC DEB] " + "EVENT_PS_RESTRICT_ENABLED " + mIsPsRestricted); + stopNetStatPoll(); + mIsPsRestricted = true; + break; + + case EVENT_PS_RESTRICT_DISABLED: + /** + * When PS restrict is removed, we need setup PDP connection if + * PDP connection is down. + */ + Log.d(LOG_TAG, "[DSAC DEB] " + "EVENT_PS_RESTRICT_DISABLED " + mIsPsRestricted); + mIsPsRestricted = false; + if (state == State.CONNECTED) { + startNetStatPoll(); + } else { + if (state == State.FAILED) { + cleanUpConnection(false, Phone.REASON_PS_RESTRICT_ENABLED); + nextReconnectDelay = RECONNECT_DELAY_INITIAL_MILLIS; + } + trySetupData(Phone.REASON_PS_RESTRICT_ENABLED); + } + break; + } } diff --git a/telephony/java/com/android/internal/telephony/gsm/GSMConnection.java b/telephony/java/com/android/internal/telephony/gsm/GSMConnection.java index a503766..70e9f62 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GSMConnection.java +++ b/telephony/java/com/android/internal/telephony/gsm/GSMConnection.java @@ -390,6 +390,16 @@ public class GSMConnection extends Connection { return DisconnectCause.OUT_OF_SERVICE; } else if (phone.getSimCard().getState() != GsmSimCard.State.READY) { return DisconnectCause.SIM_ERROR; + } else if (causeCode == CallFailCause.ERROR_UNSPECIFIED) { + if (phone.mSST.rs.isCsRestricted()) { + return DisconnectCause.CS_RESTRICTED; + } else if (phone.mSST.rs.isCsEmergencyRestricted()) { + return DisconnectCause.CS_RESTRICTED_EMERGENCY; + } else if (phone.mSST.rs.isCsNormalRestricted()) { + return DisconnectCause.CS_RESTRICTED_NORMAL; + } else { + return DisconnectCause.NORMAL; + } } else { return DisconnectCause.NORMAL; } diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmSimCard.java b/telephony/java/com/android/internal/telephony/gsm/GsmSimCard.java index 0859806..a4cded9 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmSimCard.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmSimCard.java @@ -258,7 +258,7 @@ public final class GsmSimCard extends Handler implements SimCard { } public String getServiceProviderName () { - return phone.mSIMRecords.getServiceProvideName(); + return phone.mSIMRecords.getServiceProviderName(); } //***** Handler implementation diff --git a/telephony/java/com/android/internal/telephony/gsm/RIL.java b/telephony/java/com/android/internal/telephony/gsm/RIL.java index 45000ba..7622560 100644 --- a/telephony/java/com/android/internal/telephony/gsm/RIL.java +++ b/telephony/java/com/android/internal/telephony/gsm/RIL.java @@ -1970,6 +1970,7 @@ public final class RIL extends BaseCommands implements CommandsInterface case RIL_UNSOL_SIM_SMS_STORAGE_FULL: ret = responseVoid(p); break; case RIL_UNSOL_SIM_REFRESH: ret = responseInts(p); break; case RIL_UNSOL_CALL_RING: ret = responseVoid(p); break; + case RIL_UNSOL_RESTRICTED_STATE_CHANGED: ret = responseInts(p); break; default: throw new RuntimeException("Unrecognized unsol response: " + response); //break; (implied) @@ -2160,6 +2161,13 @@ public final class RIL extends BaseCommands implements CommandsInterface mRingRegistrant.notifyRegistrant(); } break; + + case RIL_UNSOL_RESTRICTED_STATE_CHANGED: + if (RILJ_LOGD) unsljLogvRet(response, ret); + if (mRestrictedStateRegistrant != null) { + mRestrictedStateRegistrant.notifyRegistrant( + new AsyncResult (null, ret, null)); + } } } @@ -2543,6 +2551,7 @@ public final class RIL extends BaseCommands implements CommandsInterface case RIL_UNSOL_SIM_SMS_STORAGE_FULL: return "UNSOL_SIM_SMS_STORAGE_FULL"; case RIL_UNSOL_SIM_REFRESH: return "UNSOL_SIM_REFRESH"; case RIL_UNSOL_CALL_RING: return "UNSOL_CALL_RING"; + case RIL_UNSOL_RESTRICTED_STATE_CHANGED: return "RIL_UNSOL_RESTRICTED_STATE_CHANGED"; default: return "<unknown reponse>"; } } diff --git a/telephony/java/com/android/internal/telephony/gsm/RILConstants.java b/telephony/java/com/android/internal/telephony/gsm/RILConstants.java index 0a8e192..4463b20 100644 --- a/telephony/java/com/android/internal/telephony/gsm/RILConstants.java +++ b/telephony/java/com/android/internal/telephony/gsm/RILConstants.java @@ -51,6 +51,32 @@ cat include/telephony/ril.h | \ int RIL_SIM_PIN = 3; int RIL_SIM_PUK = 4; int RIL_SIM_NETWORK_PERSONALIZATION = 5; + + /** + * No restriction at all including voice/SMS/USSD/SS/AV64 + * and packet data. + */ + int RIL_RESTRICTED_STATE_NONE = 0x00; + /** + * Block emergency call due to restriction. + * But allow all normal voice/SMS/USSD/SS/AV64. + */ + int RIL_RESTRICTED_STATE_CS_EMERGENCY = 0x01; + /** + * Block all normal voice/SMS/USSD/SS/AV64 due to restriction. + * Only Emergency call allowed. + */ + int RIL_RESTRICTED_STATE_CS_NORMAL = 0x02; + /** + * Block all voice/SMS/USSD/SS/AV64 + * including emergency call due to restriction. + */ + int RIL_RESTRICTED_STATE_CS_ALL = 0x04; + /** + * Block packet data access due to restriction. + */ + int RIL_RESTRICTED_STATE_PS_ALL = 0x10; + int RIL_REQUEST_GET_SIM_STATUS = 1; int RIL_REQUEST_ENTER_SIM_PIN = 2; int RIL_REQUEST_ENTER_SIM_PUK = 3; @@ -147,4 +173,5 @@ cat include/telephony/ril.h | \ int RIL_UNSOL_SIM_SMS_STORAGE_FULL = 1016; int RIL_UNSOL_SIM_REFRESH = 1017; int RIL_UNSOL_CALL_RING = 1018; + int RIL_UNSOL_RESTRICTED_STATE_CHANGED = 1023; } diff --git a/telephony/java/com/android/internal/telephony/gsm/RestrictedState.java b/telephony/java/com/android/internal/telephony/gsm/RestrictedState.java new file mode 100644 index 0000000..d17f134 --- /dev/null +++ b/telephony/java/com/android/internal/telephony/gsm/RestrictedState.java @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2006 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. + */ + +package com.android.internal.telephony.gsm; + +import android.telephony.ServiceState; + +public class RestrictedState { + + /** + * Set true to block packet data access due to restriction + */ + private boolean mPsRestricted; + /** + * Set true to block all normal voice/SMS/USSD/SS/AV64 due to restriction + */ + private boolean mCsNormalRestricted; + /** + * Set true to block emergency call due to restriction + */ + private boolean mCsEmergencyRestricted; + + public RestrictedState() { + setPsRestricted(false); + setCsNormalRestricted(false); + setCsEmergencyRestricted(false); + } + + /** + * @param csEmergencyRestricted the csEmergencyRestricted to set + */ + public void setCsEmergencyRestricted(boolean csEmergencyRestricted) { + mCsEmergencyRestricted = csEmergencyRestricted; + } + + /** + * @return the csEmergencyRestricted + */ + public boolean isCsEmergencyRestricted() { + return mCsEmergencyRestricted; + } + + /** + * @param csNormalRestricted the csNormalRestricted to set + */ + public void setCsNormalRestricted(boolean csNormalRestricted) { + mCsNormalRestricted = csNormalRestricted; + } + + /** + * @return the csNormalRestricted + */ + public boolean isCsNormalRestricted() { + return mCsNormalRestricted; + } + + /** + * @param psRestricted the psRestricted to set + */ + public void setPsRestricted(boolean psRestricted) { + mPsRestricted = psRestricted; + } + + /** + * @return the psRestricted + */ + public boolean isPsRestricted() { + return mPsRestricted; + } + + public boolean isCsRestricted() { + return mCsNormalRestricted && mCsEmergencyRestricted; + } + + @Override + public boolean equals (Object o) { + RestrictedState s; + + try { + s = (RestrictedState) o; + } catch (ClassCastException ex) { + return false; + } + + if (o == null) { + return false; + } + + return mPsRestricted == s.mPsRestricted + && mCsNormalRestricted == s.mCsNormalRestricted + && mCsEmergencyRestricted == s.mCsEmergencyRestricted; + } + + @Override + public String toString() { + String csString = "none"; + + if (mCsEmergencyRestricted && mCsNormalRestricted) { + csString = "all"; + } else if (mCsEmergencyRestricted && !mCsNormalRestricted) { + csString = "emergency"; + } else if (!mCsEmergencyRestricted && mCsNormalRestricted) { + csString = "normal call"; + } + + return "Restricted State CS: " + csString + " PS:" + mPsRestricted; + } + +} diff --git a/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java b/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java index 22bd6e2..a62f6cf 100644 --- a/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java +++ b/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java @@ -56,6 +56,7 @@ public final class SIMRecords extends Handler implements SimConstants AdnRecordCache adnCache; VoiceMailConstants mVmConfig; + SpnOverride mSpnOverride; //***** Cached SIM State; cleared on channel close @@ -167,6 +168,7 @@ public final class SIMRecords extends Handler implements SimConstants adnCache = new AdnRecordCache(phone); mVmConfig = new VoiceMailConstants(); + mSpnOverride = new SpnOverride(); recordsRequested = false; // No load request is made till SIM ready @@ -202,7 +204,6 @@ public final class SIMRecords extends Handler implements SimConstants spnDisplayCondition = -1; efMWIS = null; efCPHS_MWI = null; - spn = null; spdiNetworks = null; pnnHomeName = null; @@ -284,7 +285,7 @@ public final class SIMRecords extends Handler implements SimConstants * Return Service Provider Name stored in SIM * @return null if SIM is not yet ready */ - public String getServiceProvideName() + String getServiceProviderName() { return spn; } @@ -1257,10 +1258,11 @@ public final class SIMRecords extends Handler implements SimConstants { Log.d(LOG_TAG, "SIMRecords: record load complete"); + String operator = getSIMOperatorNumeric(); + // Some fields require more than one SIM record to set - phone.setSystemProperty(PROPERTY_SIM_OPERATOR_NUMERIC, - getSIMOperatorNumeric()); + phone.setSystemProperty(PROPERTY_SIM_OPERATOR_NUMERIC, operator); if (imsi != null) { phone.setSystemProperty(PROPERTY_SIM_OPERATOR_ISO_COUNTRY, @@ -1271,7 +1273,8 @@ public final class SIMRecords extends Handler implements SimConstants Log.e("SIM", "[SIMRecords] onAllRecordsLoaded: imsi is NULL!"); } - setVoiceMailByCountry(getSIMOperatorNumeric()); + setVoiceMailByCountry(operator); + setSpnFromConfig(operator); recordsLoadedRegistrants.notifyRegistrants( new AsyncResult(null, null, null)); @@ -1279,6 +1282,12 @@ public final class SIMRecords extends Handler implements SimConstants SimCard.INTENT_VALUE_SIM_LOADED, null); } + private void setSpnFromConfig(String carrier) { + if (mSpnOverride.containsCarrier(carrier)) { + spn = mSpnOverride.getSpn(carrier); + } + } + private void setVoiceMailByCountry (String spn) { if (mVmConfig.containsCarrier(spn)) { isVoiceMailFixed = true; diff --git a/telephony/java/com/android/internal/telephony/gsm/SMSDispatcher.java b/telephony/java/com/android/internal/telephony/gsm/SMSDispatcher.java index 6eea1d4..877b734 100644 --- a/telephony/java/com/android/internal/telephony/gsm/SMSDispatcher.java +++ b/telephony/java/com/android/internal/telephony/gsm/SMSDispatcher.java @@ -471,35 +471,50 @@ final class SMSDispatcher extends Handler { SmsHeader header = sms.getUserDataHeader(); if (header != null) { for (SmsHeader.Element element : header.getElements()) { - switch (element.getID()) { - case SmsHeader.CONCATENATED_8_BIT_REFERENCE: { - byte[] data = element.getData(); - - referenceNumber = data[0] & 0xff; - count = data[1] & 0xff; - sequence = data[2] & 0xff; - - break; - } - - case SmsHeader.CONCATENATED_16_BIT_REFERENCE: { - byte[] data = element.getData(); - - referenceNumber = (data[0] & 0xff) * 256 + (data[1] & 0xff); - count = data[2] & 0xff; - sequence = data[3] & 0xff; - - break; - } - - case SmsHeader.APPLICATION_PORT_ADDRESSING_16_BIT: { - byte[] data = element.getData(); - - destPort = (data[0] & 0xff) << 8; - destPort |= (data[1] & 0xff); - - break; - } + try { + switch (element.getID()) { + case SmsHeader.CONCATENATED_8_BIT_REFERENCE: { + byte[] data = element.getData(); + + referenceNumber = data[0] & 0xff; + count = data[1] & 0xff; + sequence = data[2] & 0xff; + + // Per TS 23.040, 9.2.3.24.1: If the count is zero, sequence + // is zero, or sequence > count, ignore the entire element + if (count == 0 || sequence == 0 || sequence > count) { + referenceNumber = -1; + } + break; + } + + case SmsHeader.CONCATENATED_16_BIT_REFERENCE: { + byte[] data = element.getData(); + + referenceNumber = (data[0] & 0xff) * 256 + (data[1] & 0xff); + count = data[2] & 0xff; + sequence = data[3] & 0xff; + + // Per TS 23.040, 9.2.3.24.8: If the count is zero, sequence + // is zero, or sequence > count, ignore the entire element + if (count == 0 || sequence == 0 || sequence > count) { + referenceNumber = -1; + } + break; + } + + case SmsHeader.APPLICATION_PORT_ADDRESSING_16_BIT: { + byte[] data = element.getData(); + + destPort = (data[0] & 0xff) << 8; + destPort |= (data[1] & 0xff); + + break; + } + } + } catch (ArrayIndexOutOfBoundsException e) { + Log.e(TAG, "Bad element in header", e); + return; // TODO: NACK the message or something, don't just discard. } } } diff --git a/telephony/java/com/android/internal/telephony/gsm/ServiceStateTracker.java b/telephony/java/com/android/internal/telephony/gsm/ServiceStateTracker.java index 995173b..7152f76 100644 --- a/telephony/java/com/android/internal/telephony/gsm/ServiceStateTracker.java +++ b/telephony/java/com/android/internal/telephony/gsm/ServiceStateTracker.java @@ -23,11 +23,15 @@ import static com.android.internal.telephony.TelephonyProperties.PROPERTY_OPERAT import static com.android.internal.telephony.TelephonyProperties.PROPERTY_OPERATOR_NUMERIC; import static com.android.internal.telephony.TelephonyProperties.PROPERTY_SIM_OPERATOR_ALPHA; import static com.android.internal.telephony.TelephonyProperties.PROPERTY_SIM_OPERATOR_NUMERIC; + import com.android.internal.telephony.TelephonyIntents; import com.android.internal.telephony.Phone; import com.android.internal.telephony.gsm.DataConnectionTracker.State; import android.app.AlarmManager; +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; @@ -87,6 +91,7 @@ final class ServiceStateTracker extends Handler GsmCellLocation cellLoc; GsmCellLocation newCellLoc; int mPreferredNetworkType; + RestrictedState rs; int rssi = 99; // signal strength 0-31, 99=unknown // That's "received signal strength indication" fyi @@ -119,6 +124,9 @@ final class ServiceStateTracker extends Handler private RegistrantList gprsDetachedRegistrants = new RegistrantList(); private RegistrantList roamingOnRegistrants = new RegistrantList(); private RegistrantList roamingOffRegistrants = new RegistrantList(); + private RegistrantList psRestrictEnabledRegistrants = new RegistrantList(); + private RegistrantList psRestrictDisabledRegistrants = new RegistrantList(); + // Sometimes we get the NITZ time before we know what country we are in. // Keep the time zone information from the NITZ string so we can fix @@ -141,6 +149,11 @@ final class ServiceStateTracker extends Handler private boolean mStartedGprsRegCheck = false; // Already sent the event-log for no gprs register private boolean mReportedGprsNoReg = false; + + /** + * The Notification object given to the NotificationManager. + */ + private Notification mNotification; // Wake lock used while setting time of day. private PowerManager.WakeLock mWakeLock; @@ -162,6 +175,17 @@ final class ServiceStateTracker extends Handler // waiting period before recheck gprs and voice registration static final int DEFAULT_GPRS_CHECK_PERIOD_MILLIS = 60 * 1000; + // notification type + static final int PS_ENABLED = 1001; // Access Control blocks data service + static final int PS_DISABLED = 1002; // Access Control enables data service + static final int CS_ENABLED = 1003; // Access Control blocks all voice/sms service + static final int CS_DISABLED = 1004; // Access Control enables all voice/sms service + static final int CS_NORMAL_ENABLED = 1005; // Access Control blocks normal voice/sms service + static final int CS_NORMAL_DISABLED = 1006; // Access Control enables normal voice/sms service + static final int CS_EMERGENCY_ENABLED = 1007; // Access Control blocks emergency call service + static final int CS_EMERGENCY_DISABLED = 1008; // Access Control enables emergency call service + + //***** Events static final int EVENT_RADIO_STATE_CHANGED = 1; static final int EVENT_NETWORK_STATE_CHANGED = 2; @@ -182,6 +206,7 @@ final class ServiceStateTracker extends Handler static final int EVENT_SET_PREFERRED_NETWORK_TYPE = 20; static final int EVENT_RESET_PREFERRED_NETWORK_TYPE = 21; static final int EVENT_CHECK_REPORT_GPRS = 22; + static final int EVENT_RESTRICTED_STATE_CHANGED = 23; //***** Time Zones @@ -221,8 +246,7 @@ final class ServiceStateTracker extends Handler revertToNitz(); } }; - - + //***** Constructors ServiceStateTracker(GSMPhone phone) @@ -233,6 +257,7 @@ final class ServiceStateTracker extends Handler newSS = new ServiceState(); cellLoc = new GsmCellLocation(); newCellLoc = new GsmCellLocation(); + rs = new RestrictedState(); PowerManager powerManager = (PowerManager)phone.getContext().getSystemService(Context.POWER_SERVICE); @@ -244,7 +269,7 @@ final class ServiceStateTracker extends Handler cm.registerForNetworkStateChanged(this, EVENT_NETWORK_STATE_CHANGED, null); cm.setOnNITZTime(this, EVENT_NITZ_TIME, null); cm.setOnSignalStrengthUpdate(this, EVENT_SIGNAL_STRENGTH_UPDATE, null); - + cm.setOnRestrictedStateChanged(this, EVENT_RESTRICTED_STATE_CHANGED, null); cm.registerForSIMReady(this, EVENT_SIM_READY, null); // system setting property AIRPLANE_MODE_ON is set in Settings. @@ -267,8 +292,7 @@ final class ServiceStateTracker extends Handler * @param what what code of message when delivered * @param obj placed in Message.obj */ - /*protected*/ void - registerForGprsAttached(Handler h, int what, Object obj) { + /*protected*/ void registerForGprsAttached(Handler h, int what, Object obj) { Registrant r = new Registrant(h, what, obj); gprsAttachedRegistrants.add(r); @@ -291,8 +315,7 @@ final class ServiceStateTracker extends Handler * @param what what code of message when delivered * @param obj placed in Message.obj */ - /*protected*/ void - registerForGprsDetached(Handler h, int what, Object obj) { + /*protected*/ void registerForGprsDetached(Handler h, int what, Object obj) { Registrant r = new Registrant(h, what, obj); gprsDetachedRegistrants.add(r); @@ -349,6 +372,38 @@ final class ServiceStateTracker extends Handler obtainMessage(EVENT_GET_PREFERRED_NETWORK_TYPE, onComplete)); } + /** + * Registration point for transition into packet service restricted zone. + * @param h handler to notify + * @param what what code of message when delivered + * @param obj placed in Message.obj + */ + void registerForPsRestrictedEnabled(Handler h, int what, Object obj) { + Log.d(LOG_TAG, "[DSAC DEB] " + "registerForPsRestrictedEnabled "); + Registrant r = new Registrant(h, what, obj); + psRestrictEnabledRegistrants.add(r); + + if (rs.isPsRestricted()) { + r.notifyRegistrant(); + } + } + + /** + * Registration point for transition out of packet service restricted zone. + * @param h handler to notify + * @param what what code of message when delivered + * @param obj placed in Message.obj + */ + void registerForPsRestrictedDisabled(Handler h, int what, Object obj) { + Log.d(LOG_TAG, "[DSAC DEB] " + "registerForPsRestrictedDisabled "); + Registrant r = new Registrant(h, what, obj); + psRestrictDisabledRegistrants.add(r); + + if (rs.isPsRestricted()) { + r.notifyRegistrant(); + } + } + //***** Called from GSMPhone public void @@ -561,6 +616,17 @@ final class ServiceStateTracker extends Handler } mStartedGprsRegCheck = false; break; + + case EVENT_RESTRICTED_STATE_CHANGED: + // This is a notification from + // CommandsInterface.setOnRestrictedStateChanged + + Log.d(LOG_TAG, "[DSAC DEB] " + "EVENT_RESTRICTED_STATE_CHANGED"); + + ar = (AsyncResult) msg.obj; + + onRestrictedStateChanged(ar); + break; } } @@ -569,7 +635,7 @@ final class ServiceStateTracker extends Handler private void updateSpnDisplay() { int rule = phone.mSIMRecords.getDisplayRule(ss.getOperatorNumeric()); - String spn = phone.mSIMRecords.getServiceProvideName(); + String spn = phone.mSIMRecords.getServiceProviderName(); String plmn = ss.getOperatorAlphaLong(); if (rule != curSpnRule @@ -1111,6 +1177,63 @@ final class ServiceStateTracker extends Handler phone.notifySignalStrength(); } } + + /** + * Set restricted state based on the OnRestrictedStateChanged notification + * If any voice or packet restricted state changes, trigger a UI + * notification and notify registrants. + * @param ar an int value of RIL_RESTRICTED_STATE_* + */ + private void onRestrictedStateChanged(AsyncResult ar) + { + Log.d(LOG_TAG, "[DSAC DEB] " + "onRestrictedStateChanged"); + RestrictedState newRs = new RestrictedState(); + + Log.d(LOG_TAG, "[DSAC DEB] " + "current rs at enter "+ rs); + + if (ar.exception == null) { + int[] ints = (int[])ar.result; + int state = ints[0]; + + newRs.setCsEmergencyRestricted( + ((state & RILConstants.RIL_RESTRICTED_STATE_CS_EMERGENCY) != 0) || + ((state & RILConstants.RIL_RESTRICTED_STATE_CS_ALL) != 0) ); + newRs.setCsNormalRestricted( + ((state & RILConstants.RIL_RESTRICTED_STATE_CS_NORMAL) != 0) || + ((state & RILConstants.RIL_RESTRICTED_STATE_CS_ALL) != 0) ); + newRs.setPsRestricted( + (state & RILConstants.RIL_RESTRICTED_STATE_PS_ALL)!= 0); + + Log.d(LOG_TAG, "[DSAC DEB] " + "new rs "+ newRs); + + if (!rs.isPsRestricted() && newRs.isPsRestricted()) { + psRestrictEnabledRegistrants.notifyRegistrants(); + setNotification(PS_ENABLED, false); + } else if (rs.isPsRestricted() && !newRs.isPsRestricted()) { + psRestrictDisabledRegistrants.notifyRegistrants(); + setNotification(PS_DISABLED, false); + } + + if (!rs.isCsRestricted() && newRs.isCsRestricted()) { + setNotification(CS_ENABLED, false); + } else if (rs.isCsRestricted() && !newRs.isCsRestricted()) { + setNotification(CS_DISABLED, false); + } else { + if (!rs.isCsEmergencyRestricted() && newRs.isCsEmergencyRestricted()) { + setNotification(CS_EMERGENCY_ENABLED, false); + } else if (rs.isCsEmergencyRestricted() && !newRs.isCsEmergencyRestricted()) { + setNotification(CS_EMERGENCY_DISABLED, false); + } + if (!rs.isCsNormalRestricted() && newRs.isCsNormalRestricted()) { + setNotification(CS_NORMAL_ENABLED, false); + } else if (rs.isCsEmergencyRestricted() && !newRs.isCsEmergencyRestricted()) { + setNotification(CS_NORMAL_DISABLED, false); + } + } + rs = newRs; + } + Log.d(LOG_TAG, "[DSAC DEB] " + "current rs at return "+ rs); + } /** code is registration state 0-5 from TS 27.007 7.2 */ private int @@ -1465,4 +1588,72 @@ final class ServiceStateTracker extends Handler + (SystemClock.elapsedRealtime() - mSavedAtTime)); } } + + /** + * Post a notification to NotificationManager for restricted state + * + * @param notifyType is one state of PS/CS_*_ENABLE/DISABLE + * @param isCancel true to cancel the previous posted notification + * (current is not implemented yet) + */ + private void setNotification(int notifyType, boolean isCancel) { + + Log.d(LOG_TAG, "[DSAC DEB] " + "create notification " + notifyType); + mNotification = new Notification(); + mNotification.when = System.currentTimeMillis(); + mNotification.flags = Notification.FLAG_AUTO_CANCEL; + mNotification.icon = com.android.internal.R.drawable.icon_highlight_square; + Intent intent = new Intent(); + mNotification.contentIntent = PendingIntent + .getActivity(phone.getContext(), 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); + + // TODO + // should use getResources().getText(com.android.internal.R.) + CharSequence title = "Restricted State Changed"; + CharSequence details = ""; + switch (notifyType) { + case PS_ENABLED: + details = "Access Control blocks data service."; + break; + case PS_DISABLED: + details = "Access Control enables data service."; + break; + case CS_ENABLED: + details = "Access Control blocks all voice/sms service."; + break; + case CS_DISABLED: + details = "Access Control enables all voice/sms service."; + break; + case CS_NORMAL_ENABLED: + details = "Access Control blocks normal voice/sms service."; + break; + case CS_NORMAL_DISABLED: + details = "Access Control enables normal voice/sms service."; + break; + case CS_EMERGENCY_ENABLED: + details = "Access Control blocks emergency call service."; + break; + case CS_EMERGENCY_DISABLED: + details = "Access Control enables emergency call service."; + break; + } + + Log.d(LOG_TAG, "[DSAC DEB] " + "put notification " + title + " / " +details); + mNotification.tickerText = title; + mNotification.setLatestEventInfo(phone.getContext(), title, details, + mNotification.contentIntent); + + NotificationManager notificationManager = (NotificationManager) + phone.getContext().getSystemService(Context.NOTIFICATION_SERVICE); + + if (isCancel) { + // TODO + //if we go the notification route, probably want to only put up a single + //notification if both CS+PS is restricted, instead of one for each.nnnnn + //Anyway, need UX team input on UI. + //notificationManager.cancel(notifyType); + } + notificationManager.notify(notifyType, mNotification); + } + } diff --git a/telephony/java/com/android/internal/telephony/gsm/SpnOverride.java b/telephony/java/com/android/internal/telephony/gsm/SpnOverride.java new file mode 100644 index 0000000..9ea30101 --- /dev/null +++ b/telephony/java/com/android/internal/telephony/gsm/SpnOverride.java @@ -0,0 +1,78 @@ +package com.android.internal.telephony.gsm; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.HashMap; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import android.os.Environment; +import android.util.Log; +import android.util.Xml; + +import com.android.internal.util.XmlUtils; + +public class SpnOverride { + private HashMap<String, String> CarrierSpnMap; + + + static final String LOG_TAG = "GSM"; + static final String PARTNER_SPN_OVERRIDE_PATH ="etc/spn-conf.xml"; + + SpnOverride () { + CarrierSpnMap = new HashMap<String, String>(); + loadSpnOverrides(); + } + + boolean containsCarrier(String carrier) { + return CarrierSpnMap.containsKey(carrier); + } + + String getSpn(String carrier) { + return CarrierSpnMap.get(carrier); + } + + private void loadSpnOverrides() { + FileReader spnReader; + + final File spnFile = new File(Environment.getRootDirectory(), + PARTNER_SPN_OVERRIDE_PATH); + + try { + spnReader = new FileReader(spnFile); + } catch (FileNotFoundException e) { + Log.w(LOG_TAG, "Can't open " + + Environment.getRootDirectory() + "/" + PARTNER_SPN_OVERRIDE_PATH); + return; + } + + try { + XmlPullParser parser = Xml.newPullParser(); + parser.setInput(spnReader); + + XmlUtils.beginDocument(parser, "spnOverrides"); + + while (true) { + XmlUtils.nextElement(parser); + + String name = parser.getName(); + if (!"spnOverride".equals(name)) { + break; + } + + String numeric = parser.getAttributeValue(null, "numeric"); + String data = parser.getAttributeValue(null, "spn"); + + CarrierSpnMap.put(numeric, data); + } + } catch (XmlPullParserException e) { + Log.w(LOG_TAG, "Exception in spn-conf parser " + e); + } catch (IOException e) { + Log.w(LOG_TAG, "Exception in spn-conf parser " + e); + } + } + +} diff --git a/tests/CoreTests/android/webkit/UrlInterceptRegistryTest.java b/tests/CoreTests/android/webkit/UrlInterceptRegistryTest.java new file mode 100644 index 0000000..7504449 --- /dev/null +++ b/tests/CoreTests/android/webkit/UrlInterceptRegistryTest.java @@ -0,0 +1,88 @@ +/* + * 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. + */ + +package android.webkit; + +import android.test.AndroidTestCase; +import android.util.Log; +import android.webkit.CacheManager.CacheResult; +import android.webkit.PluginData; +import android.webkit.UrlInterceptHandler; + +import java.util.LinkedList; +import java.util.Map; + +public class UrlInterceptRegistryTest extends AndroidTestCase { + + /** + * To run these tests: $ mmm + * frameworks/base/tests/CoreTests/android && adb remount && adb + * sync $ adb shell am instrument -w -e class \ + * android.webkit.UrlInterceptRegistryTest \ + * android.core/android.test.InstrumentationTestRunner + */ + + private static class MockUrlInterceptHandler implements UrlInterceptHandler { + private PluginData mData; + private String mUrl; + + public MockUrlInterceptHandler(PluginData data, String url) { + mData = data; + mUrl = url; + } + + public CacheResult service(String url, Map<String, String> headers) { + return null; + } + + public PluginData getPluginData(String url, + Map<String, + String> headers) { + if (mUrl.equals(url)) { + return mData; + } + + return null; + } + } + + public void testGetPluginData() { + PluginData data = new PluginData(null, 0 , null, 200); + String url = new String("url1"); + MockUrlInterceptHandler handler1 = + new MockUrlInterceptHandler(data, url); + + data = new PluginData(null, 0 , null, 404); + url = new String("url2"); + MockUrlInterceptHandler handler2 = + new MockUrlInterceptHandler(data, url); + + assertTrue(UrlInterceptRegistry.registerHandler(handler1)); + assertTrue(UrlInterceptRegistry.registerHandler(handler2)); + + data = UrlInterceptRegistry.getPluginData("url1", null); + assertTrue(data != null); + assertTrue(data.getStatusCode() == 200); + + data = UrlInterceptRegistry.getPluginData("url2", null); + assertTrue(data != null); + assertTrue(data.getStatusCode() == 404); + + assertTrue(UrlInterceptRegistry.unregisterHandler(handler1)); + assertTrue(UrlInterceptRegistry.unregisterHandler(handler2)); + + } +} diff --git a/tests/DumpRenderTree/results/layout_tests_crashed.txt b/tests/DumpRenderTree/results/layout_tests_crashed.txt index 1859f07..5a38ed8 100644 --- a/tests/DumpRenderTree/results/layout_tests_crashed.txt +++ b/tests/DumpRenderTree/results/layout_tests_crashed.txt @@ -1,2 +1 @@ -/sdcard/android/layout_tests/fast/js/regexp-charclass-crash.html -/sdcard/android/layout_tests/fast/canvas/gradient-add-second-start-end-stop.html +/sdcard/android/layout_tests/fast/js/regexp-charclass-crash.html
\ No newline at end of file diff --git a/tests/DumpRenderTree/results/layout_tests_failed.txt b/tests/DumpRenderTree/results/layout_tests_failed.txt index 5a20b52..3cec40d 100644 --- a/tests/DumpRenderTree/results/layout_tests_failed.txt +++ b/tests/DumpRenderTree/results/layout_tests_failed.txt @@ -1,283 +1,280 @@ -/sdcard/android/layout_tests/fast/text/zero-width-characters.html : different length -/sdcard/android/layout_tests/fast/text/reset-drag-on-mouse-down.html : TIMEDOUT -/sdcard/android/layout_tests/fast/text/plain-text-line-breaks.html : different length +/sdcard/android/layout_tests/fast/replaced/image-map-bug16782.html : different length /sdcard/android/layout_tests/fast/replaced/table-percent-height.html : different length /sdcard/android/layout_tests/fast/replaced/image-map.html : different length -/sdcard/android/layout_tests/fast/replaced/image-map-bug16782.html : different length -/sdcard/android/layout_tests/fast/parser/xml-declaration-missing-ending-mark.html : different length -/sdcard/android/layout_tests/fast/parser/tabindex-parsing.html : different length -/sdcard/android/layout_tests/fast/parser/script-tag-with-trailing-slash.html : different length -/sdcard/android/layout_tests/fast/parser/external-entities.xml : different length -/sdcard/android/layout_tests/fast/parser/entity-end-script-tag.html : different length -/sdcard/android/layout_tests/fast/parser/entity-comment-in-iframe.html : @offset: 0 -/sdcard/android/layout_tests/fast/parser/comment-in-iframe.html : @offset: 0 +/sdcard/android/layout_tests/fast/dynamic/paused-event-dispatch.html : @offset: 117 +/sdcard/android/layout_tests/fast/text/plain-text-line-breaks.html : different length +/sdcard/android/layout_tests/fast/text/zero-width-characters.html : different length +/sdcard/android/layout_tests/fast/text/reset-drag-on-mouse-down.html : TIMEDOUT +/sdcard/android/layout_tests/fast/encoding/invalid-xml.html : different length +/sdcard/android/layout_tests/fast/encoding/char-decoding-mac.html : different length +/sdcard/android/layout_tests/fast/encoding/frame-default-enc.html : @offset: 0 +/sdcard/android/layout_tests/fast/encoding/mailto-always-utf-8.html : different length +/sdcard/android/layout_tests/fast/encoding/char-decoding.html : different length +/sdcard/android/layout_tests/fast/encoding/url-host-name-non-ascii.html : different length +/sdcard/android/layout_tests/fast/encoding/idn-security.html : different length +/sdcard/android/layout_tests/fast/encoding/percent-escaping.html : TIMEDOUT +/sdcard/android/layout_tests/fast/encoding/xml-utf-8-default.xml : different length +/sdcard/android/layout_tests/fast/encoding/char-encoding-mac.html : different length +/sdcard/android/layout_tests/fast/encoding/charset-koi8-u.html : @offset: 147 +/sdcard/android/layout_tests/fast/encoding/preload-encoding.html : different length +/sdcard/android/layout_tests/fast/workers/worker-location.html : TIMEDOUT +/sdcard/android/layout_tests/fast/workers/worker-constructor.html : different length +/sdcard/android/layout_tests/fast/workers/worker-terminate.html : different length +/sdcard/android/layout_tests/fast/workers/worker-gc.html : different length +/sdcard/android/layout_tests/fast/workers/worker-navigator.html : different length +/sdcard/android/layout_tests/fast/workers/worker-replace-global-constructor.html : TIMEDOUT +/sdcard/android/layout_tests/fast/workers/worker-replace-self.html : TIMEDOUT +/sdcard/android/layout_tests/fast/workers/worker-event-listener.html : TIMEDOUT /sdcard/android/layout_tests/fast/overflow/scroll-vertical-not-horizontal.html : different length -/sdcard/android/layout_tests/fast/loader/xmlhttprequest-missing-file-exception.html : different length -/sdcard/android/layout_tests/fast/loader/stop-provisional-loads.html : different length -/sdcard/android/layout_tests/fast/loader/plain-text-document.html : different length -/sdcard/android/layout_tests/fast/loader/opaque-base-url.html : @offset: 129 -/sdcard/android/layout_tests/fast/loader/onunload-form-submit-crash.html : different length -/sdcard/android/layout_tests/fast/loader/onunload-form-submit-crash-2.html : different length -/sdcard/android/layout_tests/fast/loader/local-JavaScript-from-local.html : different length -/sdcard/android/layout_tests/fast/loader/local-image-from-local.html : different length -/sdcard/android/layout_tests/fast/loader/local-iFrame-source-from-local.html : different length -/sdcard/android/layout_tests/fast/loader/local-CSS-from-local.html : TIMEDOUT -/sdcard/android/layout_tests/fast/loader/data-url-encoding-svg.html : different length -/sdcard/android/layout_tests/fast/loader/cancel-load-during-port-block-timer.html : TIMEDOUT -/sdcard/android/layout_tests/fast/js/var-shadows-arg-gc-crash.html : TIMEDOUT -/sdcard/android/layout_tests/fast/js/try-catch-crash.html : TIMEDOUT -/sdcard/android/layout_tests/fast/js/toString-and-valueOf-override.html : TIMEDOUT -/sdcard/android/layout_tests/fast/js/recursion-limit-equal.html : different length -/sdcard/android/layout_tests/fast/js/navigator-mimeTypes-length.html : different length -/sdcard/android/layout_tests/fast/js/math-transforms.html : TIMEDOUT -/sdcard/android/layout_tests/fast/js/global-recursion-on-full-stack.html : different length -/sdcard/android/layout_tests/fast/js/global-constructors.html : different length -/sdcard/android/layout_tests/fast/js/exceptions-thrown-in-callbacks.html : TIMEDOUT -/sdcard/android/layout_tests/fast/js/exception-sequencing.html : TIMEDOUT -/sdcard/android/layout_tests/fast/js/exception-sequencing-binops2.html : TIMEDOUT -/sdcard/android/layout_tests/fast/js/exception-sequencing-binops.html : TIMEDOUT -/sdcard/android/layout_tests/fast/js/exception-codegen-crash.html : different length -/sdcard/android/layout_tests/fast/js/duplicate-param-gc-crash.html : TIMEDOUT -/sdcard/android/layout_tests/fast/html/tab-order.html : @offset: 246 -/sdcard/android/layout_tests/fast/history/subframe-is-visited.html : different length -/sdcard/android/layout_tests/fast/history/go-back-to-changed-name.html : different length -/sdcard/android/layout_tests/fast/frames/viewsource-empty-attribute-value.html : different length -/sdcard/android/layout_tests/fast/frames/removal-before-attach-crash.html : different length -/sdcard/android/layout_tests/fast/frames/iframe-window-focus.html : different length -/sdcard/android/layout_tests/fast/frames/frameElement-widthheight.html : different length -/sdcard/android/layout_tests/fast/frames/frame-js-url-clientWidth.html : different length -/sdcard/android/layout_tests/fast/frames/frame-base-url.html : different length -/sdcard/android/layout_tests/fast/frames/empty-frame-src.html : TIMEDOUT -/sdcard/android/layout_tests/fast/forms/mailto/post-text-plain.html : different length -/sdcard/android/layout_tests/fast/forms/mailto/post-text-plain-with-accept-charset.html : different length -/sdcard/android/layout_tests/fast/forms/mailto/post-multiple-items.html : different length -/sdcard/android/layout_tests/fast/forms/mailto/post-multiple-items-x-www-form-urlencoded.html : different length -/sdcard/android/layout_tests/fast/forms/mailto/post-multiple-items-text-plain.html : different length -/sdcard/android/layout_tests/fast/forms/mailto/post-multiple-items-multipart-form-data.html : different length -/sdcard/android/layout_tests/fast/forms/mailto/post-append-query.html : different length -/sdcard/android/layout_tests/fast/forms/mailto/get-overwrite-query.html : different length -/sdcard/android/layout_tests/fast/forms/mailto/get-non-ascii.html : different length -/sdcard/android/layout_tests/fast/forms/mailto/get-non-ascii-text-plain.html : different length -/sdcard/android/layout_tests/fast/forms/mailto/get-non-ascii-text-plain-latin-1.html : different length -/sdcard/android/layout_tests/fast/forms/mailto/get-non-ascii-always-utf-8.html : different length -/sdcard/android/layout_tests/fast/forms/mailto/get-multiple-items.html : different length -/sdcard/android/layout_tests/fast/forms/mailto/get-multiple-items-x-www-form-urlencoded.html : different length -/sdcard/android/layout_tests/fast/forms/mailto/get-multiple-items-text-plain.html : different length -/sdcard/android/layout_tests/fast/forms/mailto/advanced-put.html : different length -/sdcard/android/layout_tests/fast/forms/mailto/advanced-get.html : different length -/sdcard/android/layout_tests/fast/forms/textfield-to-password-on-focus.html : different length -/sdcard/android/layout_tests/fast/forms/textfield-onchange-deletion.html : different length -/sdcard/android/layout_tests/fast/forms/textfield-inside-anchor.html : different length -/sdcard/android/layout_tests/fast/forms/textarea-type-spaces.html : different length -/sdcard/android/layout_tests/fast/forms/textarea-scrolled-endline-caret.html : different length -/sdcard/android/layout_tests/fast/forms/textarea-paste-newline.html : different length -/sdcard/android/layout_tests/fast/forms/textarea-no-scroll-on-blur.html : @offset: 79 -/sdcard/android/layout_tests/fast/forms/textarea-initial-caret-position.html : different length -/sdcard/android/layout_tests/fast/forms/textarea-hard-linewrap.html : different length -/sdcard/android/layout_tests/fast/forms/textarea-default-value-leading-newline.html : TIMEDOUT -/sdcard/android/layout_tests/fast/forms/textarea-appearance-wrap.html : different length -/sdcard/android/layout_tests/fast/forms/text-field-setvalue-crash.html : different length -/sdcard/android/layout_tests/fast/forms/stuff-on-my-optgroup.html : TIMEDOUT -/sdcard/android/layout_tests/fast/forms/slider-onchange-event.html : different length -/sdcard/android/layout_tests/fast/forms/slider-mouse-events.html : different length -/sdcard/android/layout_tests/fast/forms/selection-functions.html : @offset: 306 -/sdcard/android/layout_tests/fast/forms/select-type-ahead-non-latin.html : different length -/sdcard/android/layout_tests/fast/forms/select-enter-key.html : different length -/sdcard/android/layout_tests/fast/forms/select-empty-list.html : different length -/sdcard/android/layout_tests/fast/forms/select-double-onchange.html : different length -/sdcard/android/layout_tests/fast/forms/select-accesskey.html : different length -/sdcard/android/layout_tests/fast/forms/search-hidden-cancel-button.html : different length -/sdcard/android/layout_tests/fast/forms/search-event-delay.html : different length -/sdcard/android/layout_tests/fast/forms/search-click-in-placeholder.html : @offset: 1 -/sdcard/android/layout_tests/fast/forms/search-cancel-button-mouseup.html : different length -/sdcard/android/layout_tests/fast/forms/plaintext-mode-1.html : different length -/sdcard/android/layout_tests/fast/forms/password-doubleclick-selection.html : different length -/sdcard/android/layout_tests/fast/forms/onselect-textfield.html : different length -/sdcard/android/layout_tests/fast/forms/onselect-textarea.html : different length -/sdcard/android/layout_tests/fast/forms/onselect-selectall.html : different length -/sdcard/android/layout_tests/fast/forms/onchange-enter-submit.html : different length -/sdcard/android/layout_tests/fast/forms/listbox-typeahead-scroll.html : different length -/sdcard/android/layout_tests/fast/forms/listbox-selection.html : different length -/sdcard/android/layout_tests/fast/forms/listbox-select-all.html : different length -/sdcard/android/layout_tests/fast/forms/listbox-onchange.html : different length -/sdcard/android/layout_tests/fast/forms/legend-access-key.html : different length -/sdcard/android/layout_tests/fast/forms/input-select-on-click.html : different length -/sdcard/android/layout_tests/fast/forms/input-radio-checked-tab.html : @offset: 115 -/sdcard/android/layout_tests/fast/forms/input-maxlength.html : TIMEDOUT -/sdcard/android/layout_tests/fast/forms/input-implicit-length-limit.html : different length -/sdcard/android/layout_tests/fast/forms/input-first-letter.html : TIMEDOUT -/sdcard/android/layout_tests/fast/forms/input-delete.html : different length -/sdcard/android/layout_tests/fast/forms/form-element-geometry.html : TIMEDOUT -/sdcard/android/layout_tests/fast/forms/form-collection-lookup.html : different length -/sdcard/android/layout_tests/fast/forms/form-and-frame-interaction-retains-values.html : different length -/sdcard/android/layout_tests/fast/forms/focus2.html : different length -/sdcard/android/layout_tests/fast/forms/focus.html : different length -/sdcard/android/layout_tests/fast/forms/focus-selection-textarea.html : different length -/sdcard/android/layout_tests/fast/forms/focus-selection-input.html : different length -/sdcard/android/layout_tests/fast/forms/focus-control-to-page.html : different length -/sdcard/android/layout_tests/fast/forms/enter-clicks-buttons.html : different length -/sdcard/android/layout_tests/fast/forms/drag-out-of-textarea.html : different length -/sdcard/android/layout_tests/fast/forms/drag-into-textarea.html : different length -/sdcard/android/layout_tests/fast/forms/check-box-enter-key.html : different length -/sdcard/android/layout_tests/fast/forms/button-state-restore.html : different length -/sdcard/android/layout_tests/fast/forms/button-spacebar-click.html : different length -/sdcard/android/layout_tests/fast/forms/button-enter-click.html : different length -/sdcard/android/layout_tests/fast/forms/autofocus-opera-003.html : @offset: 51 -/sdcard/android/layout_tests/fast/forms/access-key.html : different length -/sdcard/android/layout_tests/fast/events/window-events-capture.html : different length -/sdcard/android/layout_tests/fast/events/window-events-bubble2.html : different length -/sdcard/android/layout_tests/fast/events/window-events-bubble.html : different length -/sdcard/android/layout_tests/fast/events/tabindex-focus-chain.html : @offset: 0 -/sdcard/android/layout_tests/fast/events/scrollbar-double-click.html : different length -/sdcard/android/layout_tests/fast/events/scroll-to-anchor-in-overflow-hidden.html : different length +/sdcard/android/layout_tests/fast/events/onunload.html : different length +/sdcard/android/layout_tests/fast/events/mouseup-outside-document.html : different length +/sdcard/android/layout_tests/fast/events/offsetX-offsetY.html : different length /sdcard/android/layout_tests/fast/events/scroll-event-does-not-bubble.html : different length -/sdcard/android/layout_tests/fast/events/related-target.html : different length +/sdcard/android/layout_tests/fast/events/mouseover-mouseout.html : different length /sdcard/android/layout_tests/fast/events/option-tab.html : different length -/sdcard/android/layout_tests/fast/events/open-window-from-another-frame.html : different length -/sdcard/android/layout_tests/fast/events/onunload.html : different length -/sdcard/android/layout_tests/fast/events/onunload-window-property.html : different length -/sdcard/android/layout_tests/fast/events/onunload-not-on-body.html : different length -/sdcard/android/layout_tests/fast/events/onunload-clears-onbeforeunload.html : different length -/sdcard/android/layout_tests/fast/events/onsearch-enter.html : different length +/sdcard/android/layout_tests/fast/events/popup-blocking-click-in-iframe.html : different length +/sdcard/android/layout_tests/fast/events/onchange-passwordfield.html : different length +/sdcard/android/layout_tests/fast/events/drag-in-frames.html : different length +/sdcard/android/layout_tests/fast/events/frame-tab-focus.html : different length +/sdcard/android/layout_tests/fast/events/autoscroll-in-textfield.html : different length +/sdcard/android/layout_tests/fast/events/arrow-navigation.html : different length +/sdcard/android/layout_tests/fast/events/fire-scroll-event.html : different length +/sdcard/android/layout_tests/fast/events/mouseclick-target-and-positioning.html : different length +/sdcard/android/layout_tests/fast/events/keydown-keypress-focus-change.html : @offset: 172 +/sdcard/android/layout_tests/fast/events/input-image-scrolled-x-y.html : TIMEDOUT +/sdcard/android/layout_tests/fast/events/dblclick-addEventListener.html : different length +/sdcard/android/layout_tests/fast/events/frame-programmatic-focus.html : different length +/sdcard/android/layout_tests/fast/events/related-target.html : different length +/sdcard/android/layout_tests/fast/events/content-changed-during-drop.html : different length +/sdcard/android/layout_tests/fast/events/onload-fires-twice.html : different length +/sdcard/android/layout_tests/fast/events/autoscroll-with-non-scrollable-parent.html : different length +/sdcard/android/layout_tests/fast/events/window-events-capture.html : different length +/sdcard/android/layout_tests/fast/events/onchange-click-hang.html : TIMEDOUT /sdcard/android/layout_tests/fast/events/onload-webkit-before-webcore.html : @offset: 105 -/sdcard/android/layout_tests/fast/events/ondragenter.html : different length -/sdcard/android/layout_tests/fast/events/onclick-list-marker.html : different length -/sdcard/android/layout_tests/fast/events/onchange-textfield.html : different length +/sdcard/android/layout_tests/fast/events/window-events-bubble2.html : different length +/sdcard/android/layout_tests/fast/events/js-keyboard-event-creation.html : different length +/sdcard/android/layout_tests/fast/events/event-view-toString.html : TIMEDOUT /sdcard/android/layout_tests/fast/events/onchange-select-popup.html : different length -/sdcard/android/layout_tests/fast/events/onchange-searchfield.html : different length -/sdcard/android/layout_tests/fast/events/onchange-passwordfield.html : different length -/sdcard/android/layout_tests/fast/events/onchange-click-hang.html : different length -/sdcard/android/layout_tests/fast/events/mouseup-outside-document.html : different length +/sdcard/android/layout_tests/fast/events/access-key-self-destruct.html : different length +/sdcard/android/layout_tests/fast/events/scrollbar-double-click.html : different length +/sdcard/android/layout_tests/fast/events/onunload-clears-onbeforeunload.html : different length +/sdcard/android/layout_tests/fast/events/tabindex-focus-chain.html : @offset: 0 +/sdcard/android/layout_tests/fast/events/capture-on-target.html : different length +/sdcard/android/layout_tests/fast/events/window-events-bubble.html : different length /sdcard/android/layout_tests/fast/events/mouseup-from-button2.html : different length -/sdcard/android/layout_tests/fast/events/mouseover-mouseout2.html : different length -/sdcard/android/layout_tests/fast/events/mouseover-mouseout.html : different length +/sdcard/android/layout_tests/fast/events/frame-click-focus.html : different length /sdcard/android/layout_tests/fast/events/mouseout-on-window.html : different length +/sdcard/android/layout_tests/fast/events/keypress-insert-tab.html : @offset: 85 /sdcard/android/layout_tests/fast/events/mouseout-dead-subframe.html : TIMEDOUT +/sdcard/android/layout_tests/fast/events/iframe-object-onload.html : different length +/sdcard/android/layout_tests/fast/events/onunload-not-on-body.html : different length /sdcard/android/layout_tests/fast/events/mousemove-after-drag-over-scrollbar.html : different length -/sdcard/android/layout_tests/fast/events/mouseclick-target-and-positioning.html : different length -/sdcard/android/layout_tests/fast/events/mouse-click-events.html : different length -/sdcard/android/layout_tests/fast/events/keypress-insert-tab.html : @offset: 85 +/sdcard/android/layout_tests/fast/events/contextmenu-scrolled-page-with-frame.html : different length +/sdcard/android/layout_tests/fast/events/key-events-in-input-button.html : different length +/sdcard/android/layout_tests/fast/events/arrow-keys-on-body.html : different length +/sdcard/android/layout_tests/fast/events/ondragenter.html : different length +/sdcard/android/layout_tests/fast/events/scroll-to-anchor-in-overflow-hidden.html : different length +/sdcard/android/layout_tests/fast/events/autoscroll-nonscrollable-iframe-in-scrollable-div.html : different length /sdcard/android/layout_tests/fast/events/keypress-focus-change.html : different length -/sdcard/android/layout_tests/fast/events/keydown-keypress-preventDefault.html : @offset: 228 -/sdcard/android/layout_tests/fast/events/keydown-keypress-focus-change.html : @offset: 172 /sdcard/android/layout_tests/fast/events/key-events-in-input-text.html : different length -/sdcard/android/layout_tests/fast/events/key-events-in-input-button.html : different length -/sdcard/android/layout_tests/fast/events/js-keyboard-event-creation.html : different length -/sdcard/android/layout_tests/fast/events/input-image-scrolled-x-y.html : TIMEDOUT -/sdcard/android/layout_tests/fast/events/iframe-object-onload.html : different length -/sdcard/android/layout_tests/fast/events/frame-tab-focus.html : different length -/sdcard/android/layout_tests/fast/events/frame-programmatic-focus.html : different length -/sdcard/android/layout_tests/fast/events/frame-click-focus.html : different length -/sdcard/android/layout_tests/fast/events/fire-scroll-event.html : different length -/sdcard/android/layout_tests/fast/events/event-view-toString.html : TIMEDOUT /sdcard/android/layout_tests/fast/events/drag-outside-window.html : @offset: 20 -/sdcard/android/layout_tests/fast/events/drag-in-frames.html : different length -/sdcard/android/layout_tests/fast/events/dblclick-addEventListener.html : different length -/sdcard/android/layout_tests/fast/events/contextmenu-scrolled-page-with-frame.html : different length -/sdcard/android/layout_tests/fast/events/content-changed-during-drop.html : different length +/sdcard/android/layout_tests/fast/events/selectstart-during-autoscroll.html : different length /sdcard/android/layout_tests/fast/events/click-count.html : different length -/sdcard/android/layout_tests/fast/events/capture-on-target.html : different length -/sdcard/android/layout_tests/fast/events/autoscroll-with-non-scrollable-parent.html : different length -/sdcard/android/layout_tests/fast/events/autoscroll-nonscrollable-iframe-in-scrollable-div.html : different length -/sdcard/android/layout_tests/fast/events/autoscroll-in-textfield.html : different length -/sdcard/android/layout_tests/fast/events/arrow-navigation.html : different length -/sdcard/android/layout_tests/fast/events/arrow-keys-on-body.html : different length +/sdcard/android/layout_tests/fast/events/onchange-searchfield.html : different length +/sdcard/android/layout_tests/fast/events/special-key-events-in-input-text.html : different length +/sdcard/android/layout_tests/fast/events/keydown-keypress-preventDefault.html : @offset: 228 +/sdcard/android/layout_tests/fast/events/mouse-click-events.html : different length +/sdcard/android/layout_tests/fast/events/onsearch-enter.html : different length +/sdcard/android/layout_tests/fast/events/mouseover-mouseout2.html : different length +/sdcard/android/layout_tests/fast/events/open-window-from-another-frame.html : different length +/sdcard/android/layout_tests/fast/events/init-events.html : different length +/sdcard/android/layout_tests/fast/events/onchange-textfield.html : different length +/sdcard/android/layout_tests/fast/events/onclick-list-marker.html : different length /sdcard/android/layout_tests/fast/events/anchor-image-scrolled-x-y.html : TIMEDOUT -/sdcard/android/layout_tests/fast/events/access-key-self-destruct.html : different length -/sdcard/android/layout_tests/fast/encoding/xml-utf-8-default.xml : different length -/sdcard/android/layout_tests/fast/encoding/url-host-name-non-ascii.html : different length -/sdcard/android/layout_tests/fast/encoding/percent-escaping.html : TIMEDOUT -/sdcard/android/layout_tests/fast/encoding/mailto-always-utf-8.html : different length -/sdcard/android/layout_tests/fast/encoding/invalid-xml.html : different length -/sdcard/android/layout_tests/fast/encoding/idn-security.html : different length -/sdcard/android/layout_tests/fast/encoding/frame-default-enc.html : @offset: 0 -/sdcard/android/layout_tests/fast/encoding/charset-koi8-u.html : @offset: 147 -/sdcard/android/layout_tests/fast/encoding/char-encoding.html : different length -/sdcard/android/layout_tests/fast/encoding/char-decoding.html : different length -/sdcard/android/layout_tests/fast/dynamic/paused-event-dispatch.html : @offset: 117 +/sdcard/android/layout_tests/fast/html/tab-order.html : @offset: 246 +/sdcard/android/layout_tests/fast/js/exception-sequencing-binops.html : TIMEDOUT +/sdcard/android/layout_tests/fast/js/recursion-limit-equal.html : different length +/sdcard/android/layout_tests/fast/js/exception-sequencing-binops2.html : TIMEDOUT +/sdcard/android/layout_tests/fast/js/math-transforms.html : TIMEDOUT +/sdcard/android/layout_tests/fast/js/try-catch-crash.html : TIMEDOUT +/sdcard/android/layout_tests/fast/js/navigator-mimeTypes-length.html : different length +/sdcard/android/layout_tests/fast/js/global-constructors.html : different length +/sdcard/android/layout_tests/fast/js/uncaught-exception-line-number.html : different length +/sdcard/android/layout_tests/fast/js/exceptions-thrown-in-callbacks.html : TIMEDOUT +/sdcard/android/layout_tests/fast/js/toString-and-valueOf-override.html : TIMEDOUT +/sdcard/android/layout_tests/fast/js/exception-sequencing.html : TIMEDOUT +/sdcard/android/layout_tests/fast/js/exception-codegen-crash.html : different length +/sdcard/android/layout_tests/fast/dom/HTMLDocument/activeElement.html : different length +/sdcard/android/layout_tests/fast/dom/HTMLDocument/hasFocus.html : different length +/sdcard/android/layout_tests/fast/dom/HTMLSelectElement/listbox-select-reset.html : different length +/sdcard/android/layout_tests/fast/dom/Element/offsetLeft-offsetTop-body-quirk.html : different length +/sdcard/android/layout_tests/fast/dom/DOMException/XPathException.html : different length +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/010.xml : different length +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/011.xml : different length +/sdcard/android/layout_tests/fast/dom/Window/window-resize-and-move-arguments.html : different length +/sdcard/android/layout_tests/fast/dom/Window/window-function-name-getter-precedence.html : different length /sdcard/android/layout_tests/fast/dom/Window/window-xy-properties.html : different length -/sdcard/android/layout_tests/fast/dom/Window/window-scroll-arguments.html : different length +/sdcard/android/layout_tests/fast/dom/Window/console-functions.html : different length /sdcard/android/layout_tests/fast/dom/Window/window-screen-properties.html : @offset: 65 -/sdcard/android/layout_tests/fast/dom/Window/window-resize.html : different length -/sdcard/android/layout_tests/fast/dom/Window/window-resize-and-move-arguments.html : different length -/sdcard/android/layout_tests/fast/dom/Window/window-property-clearing.html : different length /sdcard/android/layout_tests/fast/dom/Window/window-properties.html : TIMEDOUT -/sdcard/android/layout_tests/fast/dom/Window/window-open-pending-url.html : different length /sdcard/android/layout_tests/fast/dom/Window/window-onFocus.html : different length -/sdcard/android/layout_tests/fast/dom/Window/window-function-name-getter-precedence.html : different length -/sdcard/android/layout_tests/fast/dom/Window/window-early-properties.html : different length -/sdcard/android/layout_tests/fast/dom/Window/setting-properties-on-closed-window.html : TIMEDOUT -/sdcard/android/layout_tests/fast/dom/Window/redirect-with-timer.html : different length -/sdcard/android/layout_tests/fast/dom/Window/Plug-ins.html : different length -/sdcard/android/layout_tests/fast/dom/Window/orphaned-frame-access.html : different length /sdcard/android/layout_tests/fast/dom/Window/new-window-opener.html : TIMEDOUT -/sdcard/android/layout_tests/fast/dom/Window/get-set-properties.html : @offset: 0 +/sdcard/android/layout_tests/fast/dom/Window/window-open-pending-url.html : different length +/sdcard/android/layout_tests/fast/dom/Window/setting-properties-on-closed-window.html : TIMEDOUT /sdcard/android/layout_tests/fast/dom/Window/dom-access-from-closure-window.html : different length +/sdcard/android/layout_tests/fast/dom/Window/window-resize.html : different length +/sdcard/android/layout_tests/fast/dom/Window/window-custom-prototype.html : different length /sdcard/android/layout_tests/fast/dom/Window/dom-access-from-closure-iframe.html : different length -/sdcard/android/layout_tests/fast/dom/Window/console-functions.html : different length -/sdcard/android/layout_tests/fast/dom/Window/closure-access-after-navigation-window.html : different length -/sdcard/android/layout_tests/fast/dom/Window/clear-timeout.html : different length +/sdcard/android/layout_tests/fast/dom/Window/Plug-ins.html : different length +/sdcard/android/layout_tests/fast/dom/Window/get-set-properties.html : different length +/sdcard/android/layout_tests/fast/dom/Window/window-scroll-arguments.html : different length +/sdcard/android/layout_tests/fast/dom/Window/window-early-properties.html : different length /sdcard/android/layout_tests/fast/dom/StyleSheet/ownerNode-lifetime-2.html : different length -/sdcard/android/layout_tests/fast/dom/HTMLSelectElement/listbox-select-reset.html : different length -/sdcard/android/layout_tests/fast/dom/HTMLObjectElement/object-as-frame.html : different length -/sdcard/android/layout_tests/fast/dom/HTMLDocument/hasFocus.html : different length -/sdcard/android/layout_tests/fast/dom/HTMLDocument/activeElement.html : different length -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/011.xml : different length -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/010.xml : different length -/sdcard/android/layout_tests/fast/dom/Element/offsetLeft-offsetTop-body-quirk.html : different length -/sdcard/android/layout_tests/fast/dom/DOMException/XPathException.html : different length -/sdcard/android/layout_tests/fast/dom/wrapper-classes.html : different length -/sdcard/android/layout_tests/fast/dom/tabindex-clamp.html : different length -/sdcard/android/layout_tests/fast/dom/simultaneouslyRegsiteredTimerFireOrder.html : different length -/sdcard/android/layout_tests/fast/dom/set-frame-src-while-running-script-in-frame.html : TIMEDOUT -/sdcard/android/layout_tests/fast/dom/select-selectedIndex.html : different length -/sdcard/android/layout_tests/fast/dom/open-and-close-by-DOM.html : different length -/sdcard/android/layout_tests/fast/dom/onerror-img.html : different length -/sdcard/android/layout_tests/fast/dom/object-plugin-hides-properties.html : TIMEDOUT +/sdcard/android/layout_tests/fast/dom/dom-constructors.html : different length +/sdcard/android/layout_tests/fast/dom/assign-to-window-status.html : different length +/sdcard/android/layout_tests/fast/dom/gc-8.html : different length /sdcard/android/layout_tests/fast/dom/object-embed-plugin-scripting.html : different length -/sdcard/android/layout_tests/fast/dom/null-document-window-open-crash.html : different length -/sdcard/android/layout_tests/fast/dom/null-document-location-replace-crash.html : different length -/sdcard/android/layout_tests/fast/dom/null-document-location-put-crash.html : different length -/sdcard/android/layout_tests/fast/dom/null-document-location-href-put-crash.html : different length -/sdcard/android/layout_tests/fast/dom/null-document-location-assign-crash.html : different length -/sdcard/android/layout_tests/fast/dom/null-chardata-crash.html : different length -/sdcard/android/layout_tests/fast/dom/noscript-style.html : different length -/sdcard/android/layout_tests/fast/dom/noscript-canvas-in-created-html-document.html : different length -/sdcard/android/layout_tests/fast/dom/non-numeric-values-numeric-parameters.html : different length -/sdcard/android/layout_tests/fast/dom/node-item.html : different length -/sdcard/android/layout_tests/fast/dom/node-filter-gc.html : @offset: 1 -/sdcard/android/layout_tests/fast/dom/no-elements.html : different length -/sdcard/android/layout_tests/fast/dom/navigator-vendorSub.html : different length -/sdcard/android/layout_tests/fast/dom/namespaces-1.html : different length -/sdcard/android/layout_tests/fast/dom/NamedNodeMap-setNamedItem-crash.html : different length -/sdcard/android/layout_tests/fast/dom/namednodemap-namelookup.html : different length -/sdcard/android/layout_tests/fast/dom/mutation-event-remove-inserted-node.html : different length -/sdcard/android/layout_tests/fast/dom/location-hash.html : different length -/sdcard/android/layout_tests/fast/dom/length-attribute-mapping.html : TIMEDOUT -/sdcard/android/layout_tests/fast/dom/javascript-url-crash-function.html : different length -/sdcard/android/layout_tests/fast/dom/inner-text-001.html : different length -/sdcard/android/layout_tests/fast/dom/global-constructors.html : different length -/sdcard/android/layout_tests/fast/dom/gc-acid3.html : TIMEDOUT /sdcard/android/layout_tests/fast/dom/gc-9.html : different length -/sdcard/android/layout_tests/fast/dom/gc-8.html : different length -/sdcard/android/layout_tests/fast/dom/frame-loading-via-document-write.html : TIMEDOUT -/sdcard/android/layout_tests/fast/dom/documenturi-not-affected-by-base-tag.html : different length -/sdcard/android/layout_tests/fast/dom/documenturi-can-hold-arbitrary-string.html : different length +/sdcard/android/layout_tests/fast/dom/NamedNodeMap-setNamedItem-crash.html : different length +/sdcard/android/layout_tests/fast/dom/wrapper-classes.html : different length +/sdcard/android/layout_tests/fast/dom/select-selectedIndex.html : different length /sdcard/android/layout_tests/fast/dom/document-width-height-force-layout.html : @offset: 142 -/sdcard/android/layout_tests/fast/dom/constructors-cached.html : different length -/sdcard/android/layout_tests/fast/dom/constructors-cached-navigate.html : different length /sdcard/android/layout_tests/fast/dom/client-width-height.html : @offset: 119 +/sdcard/android/layout_tests/fast/dom/clone-node-form-elements-with-attr.html : different length +/sdcard/android/layout_tests/fast/dom/dom-add-optionelement.html : different length +/sdcard/android/layout_tests/fast/dom/location-assign.html : different length +/sdcard/android/layout_tests/fast/dom/javascript-backslash.html : different length +/sdcard/android/layout_tests/fast/dom/global-constructors.html : different length /sdcard/android/layout_tests/fast/dom/client-width-height-quirks.html : @offset: 115 -/sdcard/android/layout_tests/fast/dom/assign-to-window-status.html : different length +/sdcard/android/layout_tests/fast/dom/javascript-url-crash-function.html : different length +/sdcard/android/layout_tests/fast/dom/location-hash.html : different length +/sdcard/android/layout_tests/fast/dom/constructors-cached.html : different length +/sdcard/android/layout_tests/fast/dom/documenturi-can-hold-arbitrary-string.html : different length +/sdcard/android/layout_tests/fast/dom/documenturi-not-affected-by-base-tag.html : different length +/sdcard/android/layout_tests/fast/dom/open-and-close-by-DOM.html : different length +/sdcard/android/layout_tests/fast/dom/document_write_params.html : TIMEDOUT +/sdcard/android/layout_tests/fast/dom/tabindex-clamp.html : different length +/sdcard/android/layout_tests/fast/dom/constructors-cached-navigate.html : different length +/sdcard/android/layout_tests/fast/dom/frame-loading-via-document-write.html : TIMEDOUT +/sdcard/android/layout_tests/fast/dom/ImageDocument-image-deletion.html : different length +/sdcard/android/layout_tests/fast/forms/mailto/get-non-ascii-text-plain.html : different length +/sdcard/android/layout_tests/fast/forms/mailto/advanced-get.html : different length +/sdcard/android/layout_tests/fast/forms/mailto/get-non-ascii-text-plain-latin-1.html : different length +/sdcard/android/layout_tests/fast/forms/mailto/post-multiple-items-multipart-form-data.html : different length +/sdcard/android/layout_tests/fast/forms/mailto/get-multiple-items.html : different length +/sdcard/android/layout_tests/fast/forms/mailto/get-non-ascii-always-utf-8.html : different length +/sdcard/android/layout_tests/fast/forms/mailto/post-multiple-items.html : different length +/sdcard/android/layout_tests/fast/forms/mailto/post-append-query.html : different length +/sdcard/android/layout_tests/fast/forms/mailto/get-multiple-items-x-www-form-urlencoded.html : different length +/sdcard/android/layout_tests/fast/forms/mailto/get-overwrite-query.html : different length +/sdcard/android/layout_tests/fast/forms/mailto/post-multiple-items-x-www-form-urlencoded.html : different length +/sdcard/android/layout_tests/fast/forms/mailto/get-multiple-items-text-plain.html : different length +/sdcard/android/layout_tests/fast/forms/mailto/post-multiple-items-text-plain.html : different length +/sdcard/android/layout_tests/fast/forms/mailto/get-non-ascii.html : different length +/sdcard/android/layout_tests/fast/forms/mailto/post-text-plain-with-accept-charset.html : different length +/sdcard/android/layout_tests/fast/forms/mailto/post-text-plain.html : different length +/sdcard/android/layout_tests/fast/forms/mailto/advanced-put.html : different length +/sdcard/android/layout_tests/fast/forms/listbox-typeahead-scroll.html : different length +/sdcard/android/layout_tests/fast/forms/select-empty-list.html : different length +/sdcard/android/layout_tests/fast/forms/select-accesskey.html : different length +/sdcard/android/layout_tests/fast/forms/focus2.html : different length +/sdcard/android/layout_tests/fast/forms/password-doubleclick-selection.html : different length +/sdcard/android/layout_tests/fast/forms/textfield-inside-anchor.html : different length +/sdcard/android/layout_tests/fast/forms/input-maxlength.html : different length +/sdcard/android/layout_tests/fast/forms/input-text-option-delete.html : TIMEDOUT +/sdcard/android/layout_tests/fast/forms/selection-functions.html : @offset: 306 +/sdcard/android/layout_tests/fast/forms/textfield-to-password-on-focus.html : different length +/sdcard/android/layout_tests/fast/forms/focus-selection-textarea.html : different length +/sdcard/android/layout_tests/fast/forms/enter-clicks-buttons.html : different length +/sdcard/android/layout_tests/fast/forms/menulist-no-renderer-onmousedown.html : different length +/sdcard/android/layout_tests/fast/forms/select-display-none-style-resolve.html : TIMEDOUT +/sdcard/android/layout_tests/fast/forms/radio_checked_name.html : @offset: 303 +/sdcard/android/layout_tests/fast/forms/select-double-onchange.html : different length +/sdcard/android/layout_tests/fast/forms/button-enter-click.html : different length +/sdcard/android/layout_tests/fast/forms/11423.html : different length +/sdcard/android/layout_tests/fast/forms/search-click-in-placeholder.html : @offset: 1 +/sdcard/android/layout_tests/fast/forms/autofocus-opera-003.html : @offset: 51 +/sdcard/android/layout_tests/fast/forms/search-hidden-cancel-button.html : different length +/sdcard/android/layout_tests/fast/forms/willvalidate-004.html : different length +/sdcard/android/layout_tests/fast/forms/textarea-paste-newline.html : different length +/sdcard/android/layout_tests/fast/forms/drag-into-textarea.html : different length +/sdcard/android/layout_tests/fast/forms/onselect-textfield.html : different length +/sdcard/android/layout_tests/fast/forms/input-implicit-length-limit.html : TIMEDOUT +/sdcard/android/layout_tests/fast/forms/form-and-frame-interaction-retains-values.html : different length +/sdcard/android/layout_tests/fast/forms/input-appearance-focus.html : TIMEDOUT +/sdcard/android/layout_tests/fast/forms/slider-transformed.html : different length +/sdcard/android/layout_tests/fast/forms/listbox-select-all.html : different length +/sdcard/android/layout_tests/fast/forms/textfield-onchange-deletion.html : different length +/sdcard/android/layout_tests/fast/forms/focus-control-to-page.html : different length +/sdcard/android/layout_tests/fast/forms/select-type-ahead-non-latin.html : different length +/sdcard/android/layout_tests/fast/forms/textarea-no-scroll-on-blur.html : @offset: 79 +/sdcard/android/layout_tests/fast/forms/focus-selection-input.html : different length +/sdcard/android/layout_tests/fast/forms/listbox-onchange.html : different length +/sdcard/android/layout_tests/fast/forms/button-spacebar-click.html : different length +/sdcard/android/layout_tests/fast/forms/search-event-delay.html : different length +/sdcard/android/layout_tests/fast/forms/search-cancel-button-mouseup.html : different length +/sdcard/android/layout_tests/fast/forms/select-enter-key.html : different length +/sdcard/android/layout_tests/fast/forms/drag-out-of-textarea.html : different length +/sdcard/android/layout_tests/fast/forms/textarea-hard-linewrap.html : different length +/sdcard/android/layout_tests/fast/forms/input-type-change-in-onfocus-keyboard.html : different length +/sdcard/android/layout_tests/fast/forms/dragging-to-disabled-file-input.html : different length +/sdcard/android/layout_tests/fast/forms/input-radio-checked-tab.html : @offset: 115 +/sdcard/android/layout_tests/fast/forms/plaintext-mode-1.html : different length +/sdcard/android/layout_tests/fast/forms/option-in-optgroup-removal.html : different length +/sdcard/android/layout_tests/fast/forms/search-display-none-cancel-button.html : TIMEDOUT +/sdcard/android/layout_tests/fast/forms/check-box-enter-key.html : different length +/sdcard/android/layout_tests/fast/forms/input-select-on-click.html : different length +/sdcard/android/layout_tests/fast/forms/button-state-restore.html : different length +/sdcard/android/layout_tests/fast/forms/access-key.html : different length +/sdcard/android/layout_tests/fast/forms/textarea-scrolled-endline-caret.html : different length +/sdcard/android/layout_tests/fast/forms/textarea-type-spaces.html : different length +/sdcard/android/layout_tests/fast/forms/slider-mouse-events.html : different length +/sdcard/android/layout_tests/fast/forms/textarea-selection-preservation.html : different length +/sdcard/android/layout_tests/fast/forms/slider-onchange-event.html : different length +/sdcard/android/layout_tests/fast/forms/textarea-appearance-wrap.html : different length +/sdcard/android/layout_tests/fast/forms/onselect-textarea.html : different length +/sdcard/android/layout_tests/fast/forms/textarea-initial-caret-position.html : different length +/sdcard/android/layout_tests/fast/forms/listbox-selection.html : different length /sdcard/android/layout_tests/fast/css/variables/color-hex-test.html : different length -/sdcard/android/layout_tests/fast/css/html-attr-case-sensitivity.html : TIMEDOUT -/sdcard/android/layout_tests/fast/css/hover-affects-child.html : different length -/sdcard/android/layout_tests/fast/css/getComputedStyle-transform.html : different length /sdcard/android/layout_tests/fast/css/dashboard-region-parser.html : different length +/sdcard/android/layout_tests/fast/css/hover-affects-child.html : different length +/sdcard/android/layout_tests/fast/css/html-attr-case-sensitivity.html : TIMEDOUT /sdcard/android/layout_tests/fast/css/computed-style.html : different length +/sdcard/android/layout_tests/fast/css/getComputedStyle-transform.html : different length /sdcard/android/layout_tests/fast/css/computed-style-without-renderer.html : different length +/sdcard/android/layout_tests/fast/parser/entity-comment-in-iframe.html : @offset: 0 +/sdcard/android/layout_tests/fast/parser/external-entities.xml : different length +/sdcard/android/layout_tests/fast/parser/script-tag-with-trailing-slash.html : different length +/sdcard/android/layout_tests/fast/parser/comment-in-iframe.html : @offset: 0 +/sdcard/android/layout_tests/fast/parser/xml-declaration-missing-ending-mark.html : different length +/sdcard/android/layout_tests/fast/parser/entity-end-script-tag.html : different length +/sdcard/android/layout_tests/fast/parser/tabindex-parsing.html : different length +/sdcard/android/layout_tests/fast/history/subframe-is-visited.html : different length +/sdcard/android/layout_tests/fast/history/window-open.html : TIMEDOUT +/sdcard/android/layout_tests/fast/history/go-back-to-changed-name.html : different length +/sdcard/android/layout_tests/fast/loader/cancel-load-during-port-block-timer.html : TIMEDOUT +/sdcard/android/layout_tests/fast/loader/local-iFrame-source-from-local.html : different length +/sdcard/android/layout_tests/fast/loader/null-request-after-willSendRequest.html : different length +/sdcard/android/layout_tests/fast/loader/stop-provisional-loads.html : different length +/sdcard/android/layout_tests/fast/loader/xmlhttprequest-missing-file-exception.html : different length +/sdcard/android/layout_tests/fast/loader/onunload-form-submit-crash-2.html : different length +/sdcard/android/layout_tests/fast/loader/plain-text-document.html : different length +/sdcard/android/layout_tests/fast/loader/onunload-form-submit-crash.html : different length +/sdcard/android/layout_tests/fast/loader/local-image-from-local.html : different length +/sdcard/android/layout_tests/fast/loader/local-CSS-from-local.html : TIMEDOUT +/sdcard/android/layout_tests/fast/loader/local-JavaScript-from-local.html : different length +/sdcard/android/layout_tests/fast/loader/data-url-encoding-svg.html : different length +/sdcard/android/layout_tests/fast/loader/opaque-base-url.html : @offset: 129 +/sdcard/android/layout_tests/fast/canvas/canvas-alphaImageData-behavior.html : different length +/sdcard/android/layout_tests/fast/canvas/pointInPath.html : different length /sdcard/android/layout_tests/fast/canvas/toDataURL-supportedTypes.html : different length -/sdcard/android/layout_tests/fast/canvas/canvas-save-restore-with-path.html : different length -/sdcard/android/layout_tests/fast/canvas/canvas-longlived-context.html : TIMEDOUT /sdcard/android/layout_tests/fast/canvas/canvas-getImageData.html : different length -/sdcard/android/layout_tests/fast/canvas/canvas-alphaImageData-behavior.html : different length +/sdcard/android/layout_tests/fast/canvas/canvas-longlived-context.html : TIMEDOUT +/sdcard/android/layout_tests/fast/canvas/canvas-save-restore-with-path.html : different length +/sdcard/android/layout_tests/fast/canvas/set-colors.html : different length +/sdcard/android/layout_tests/fast/frames/viewsource-empty-attribute-value.html : different length +/sdcard/android/layout_tests/fast/frames/frame-deep-nested-resize.html : different length +/sdcard/android/layout_tests/fast/frames/iframe-window-focus.html : different length +/sdcard/android/layout_tests/fast/frames/frameElement-widthheight.html : different length +/sdcard/android/layout_tests/fast/frames/removal-before-attach-crash.html : different length +/sdcard/android/layout_tests/fast/frames/frame-js-url-clientWidth.html : different length diff --git a/tests/DumpRenderTree/results/layout_tests_nontext.txt b/tests/DumpRenderTree/results/layout_tests_nontext.txt index 0355cb7..c9e166c 100644 --- a/tests/DumpRenderTree/results/layout_tests_nontext.txt +++ b/tests/DumpRenderTree/results/layout_tests_nontext.txt @@ -1,1658 +1,1753 @@ -/sdcard/android/layout_tests/fast/transforms/transforms-with-opacity.html -/sdcard/android/layout_tests/fast/transforms/transform-positioned-ancestor.html -/sdcard/android/layout_tests/fast/transforms/transform-overflow.html -/sdcard/android/layout_tests/fast/transforms/skew-with-unitless-zero.html -/sdcard/android/layout_tests/fast/transforms/shadows.html -/sdcard/android/layout_tests/fast/transforms/overflow-with-transform.html -/sdcard/android/layout_tests/fast/transforms/matrix-02.html -/sdcard/android/layout_tests/fast/transforms/matrix-01.html -/sdcard/android/layout_tests/fast/transforms/identity-matrix.html -/sdcard/android/layout_tests/fast/transforms/diamond.html -/sdcard/android/layout_tests/fast/tokenizer/script_extra_close.html -/sdcard/android/layout_tests/fast/tokenizer/script-after-frameset.html -/sdcard/android/layout_tests/fast/tokenizer/missing-title-end-tag-2.html -/sdcard/android/layout_tests/fast/tokenizer/missing-title-end-tag-1.html -/sdcard/android/layout_tests/fast/tokenizer/missing-style-end-tag-2.html -/sdcard/android/layout_tests/fast/tokenizer/missing-style-end-tag-1.html -/sdcard/android/layout_tests/fast/tokenizer/external-script-document-write_2.html -/sdcard/android/layout_tests/fast/tokenizer/external-script-document-write.html -/sdcard/android/layout_tests/fast/tokenizer/003.html -/sdcard/android/layout_tests/fast/tokenizer/002.html -/sdcard/android/layout_tests/fast/tokenizer/001.html -/sdcard/android/layout_tests/fast/text/whitespace/tab-character-basics.html -/sdcard/android/layout_tests/fast/text/whitespace/span-in-word-space-causes-overflow.html -/sdcard/android/layout_tests/fast/text/whitespace/pre-wrap-spaces-after-newline.html -/sdcard/android/layout_tests/fast/text/whitespace/pre-wrap-overflow-selection.html -/sdcard/android/layout_tests/fast/text/whitespace/pre-wrap-line-test.html -/sdcard/android/layout_tests/fast/text/whitespace/pre-wrap-last-char.html -/sdcard/android/layout_tests/fast/text/whitespace/pre-newline-box-test.html -/sdcard/android/layout_tests/fast/text/whitespace/pre-break-word.html -/sdcard/android/layout_tests/fast/text/whitespace/nowrap-clear-float.html -/sdcard/android/layout_tests/fast/text/whitespace/normal-after-nowrap-breaking.html -/sdcard/android/layout_tests/fast/text/whitespace/nbsp-mode-and-linewraps.html -/sdcard/android/layout_tests/fast/text/whitespace/030.html -/sdcard/android/layout_tests/fast/text/whitespace/029.html -/sdcard/android/layout_tests/fast/text/whitespace/028.html -/sdcard/android/layout_tests/fast/text/whitespace/027.html -/sdcard/android/layout_tests/fast/text/whitespace/026.html -/sdcard/android/layout_tests/fast/text/whitespace/025.html -/sdcard/android/layout_tests/fast/text/whitespace/024.html -/sdcard/android/layout_tests/fast/text/whitespace/023.html -/sdcard/android/layout_tests/fast/text/whitespace/022.html -/sdcard/android/layout_tests/fast/text/whitespace/021.html -/sdcard/android/layout_tests/fast/text/whitespace/020.html -/sdcard/android/layout_tests/fast/text/whitespace/019.html -/sdcard/android/layout_tests/fast/text/whitespace/018.html -/sdcard/android/layout_tests/fast/text/whitespace/017.html -/sdcard/android/layout_tests/fast/text/whitespace/016.html -/sdcard/android/layout_tests/fast/text/whitespace/015.html -/sdcard/android/layout_tests/fast/text/whitespace/014.html -/sdcard/android/layout_tests/fast/text/whitespace/013.html -/sdcard/android/layout_tests/fast/text/whitespace/012.html -/sdcard/android/layout_tests/fast/text/whitespace/011.html -/sdcard/android/layout_tests/fast/text/whitespace/010.html -/sdcard/android/layout_tests/fast/text/whitespace/009.html -/sdcard/android/layout_tests/fast/text/whitespace/008.html -/sdcard/android/layout_tests/fast/text/whitespace/007.html -/sdcard/android/layout_tests/fast/text/whitespace/006.html -/sdcard/android/layout_tests/fast/text/whitespace/005.html -/sdcard/android/layout_tests/fast/text/whitespace/004.html -/sdcard/android/layout_tests/fast/text/whitespace/003.html -/sdcard/android/layout_tests/fast/text/whitespace/002.html -/sdcard/android/layout_tests/fast/text/whitespace/001.html +/sdcard/android/layout_tests/fast/media/mq-relative-constraints-05.html +/sdcard/android/layout_tests/fast/media/mq-grid-02.html +/sdcard/android/layout_tests/fast/media/mq-compound-query-02.html +/sdcard/android/layout_tests/fast/media/mq-relative-constraints-09.html +/sdcard/android/layout_tests/fast/media/mq-width-absolute-03.html +/sdcard/android/layout_tests/fast/media/mq-invalid-media-feature-02.html +/sdcard/android/layout_tests/fast/media/mq-simple-query-04.html +/sdcard/android/layout_tests/fast/media/mq-min-pixel-ratio.html +/sdcard/android/layout_tests/fast/media/implicit-media-all.html +/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-01.html +/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-03.html +/sdcard/android/layout_tests/fast/media/viewport-media-query.html +/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-05.html +/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-01.html +/sdcard/android/layout_tests/fast/media/mq-transition.html +/sdcard/android/layout_tests/fast/media/mq-transform-04.html +/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-05.html +/sdcard/android/layout_tests/fast/media/mq-js-media-except-02.html +/sdcard/android/layout_tests/fast/media/mq-relative-constraints-02.html +/sdcard/android/layout_tests/fast/media/mq-js-stylesheet-media-03.html +/sdcard/android/layout_tests/fast/media/mq-relative-constraints-06.html +/sdcard/android/layout_tests/fast/media/mq-valueless.html +/sdcard/android/layout_tests/fast/media/mq-compound-query-03.html +/sdcard/android/layout_tests/fast/media/mq-simple-query-01.html +/sdcard/android/layout_tests/fast/media/mq-invalid-media-feature-03.html +/sdcard/android/layout_tests/fast/media/mq-width-absolute-04.html +/sdcard/android/layout_tests/fast/media/mq-simple-query-05.html +/sdcard/android/layout_tests/fast/media/mq-animation.html +/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-02.html +/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-04.html +/sdcard/android/layout_tests/fast/media/media-type-syntax-01.html +/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-06.html +/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-02.html +/sdcard/android/layout_tests/fast/media/mq-transform-01.html +/sdcard/android/layout_tests/fast/media/monochrome.html +/sdcard/android/layout_tests/fast/media/mq-pixel-ratio.html +/sdcard/android/layout_tests/fast/media/mq-js-media-except-03.html +/sdcard/android/layout_tests/fast/media/mq-relative-constraints-03.html +/sdcard/android/layout_tests/fast/media/mq-js-stylesheet-media-04.html +/sdcard/android/layout_tests/fast/media/mq-relative-constraints-07.html +/sdcard/android/layout_tests/fast/media/mq-compound-query-04.html +/sdcard/android/layout_tests/fast/media/mq-width-absolute-01.html +/sdcard/android/layout_tests/fast/media/mq-simple-query-02.html +/sdcard/android/layout_tests/fast/media/mq-invalid-media-feature-04.html +/sdcard/android/layout_tests/fast/media/mq-max-pixel-ratio.html +/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-01.html +/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-03.html +/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-05.html +/sdcard/android/layout_tests/fast/media/media-type-syntax-02.html +/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-03.html +/sdcard/android/layout_tests/fast/media/mq-transform-02.html +/sdcard/android/layout_tests/fast/media/mq-js-stylesheet-media-01.html +/sdcard/android/layout_tests/fast/media/mq-relative-constraints-04.html +/sdcard/android/layout_tests/fast/media/mq-grid-01.html +/sdcard/android/layout_tests/fast/media/mq-compound-query-01.html +/sdcard/android/layout_tests/fast/media/mq-min-constraint.html +/sdcard/android/layout_tests/fast/media/mq-relative-constraints-08.html +/sdcard/android/layout_tests/fast/media/mq-compound-query-05.html +/sdcard/android/layout_tests/fast/media/mq-width-absolute-02.html +/sdcard/android/layout_tests/fast/media/mq-invalid-media-feature-01.html +/sdcard/android/layout_tests/fast/media/mq-simple-query-03.html +/sdcard/android/layout_tests/fast/media/mq-js-media-forward-syntax.html +/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-02.html +/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-04.html +/sdcard/android/layout_tests/fast/media/mq-transform-03.html +/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-04.html +/sdcard/android/layout_tests/fast/media/mq-js-media-except-01.html +/sdcard/android/layout_tests/fast/media/mq-js-stylesheet-media-02.html +/sdcard/android/layout_tests/fast/replaced/width100percent-radio.html +/sdcard/android/layout_tests/fast/replaced/object-align-hspace-vspace.html +/sdcard/android/layout_tests/fast/replaced/width100percent-menulist.html +/sdcard/android/layout_tests/fast/replaced/selection-rect.html +/sdcard/android/layout_tests/fast/replaced/image-sizing.html +/sdcard/android/layout_tests/fast/replaced/minheight-pxs.html +/sdcard/android/layout_tests/fast/replaced/maxheight-pxs.html +/sdcard/android/layout_tests/fast/replaced/inline-box-wrapper-handover.html +/sdcard/android/layout_tests/fast/replaced/width100percent-searchfield.html +/sdcard/android/layout_tests/fast/replaced/selection-rect-transform.html +/sdcard/android/layout_tests/fast/replaced/pdf-as-image.html +/sdcard/android/layout_tests/fast/replaced/replaced-breaking-mixture.html +/sdcard/android/layout_tests/fast/replaced/minwidth-pxs.html +/sdcard/android/layout_tests/fast/replaced/width100percent-textarea.html +/sdcard/android/layout_tests/fast/replaced/maxwidth-pxs.html +/sdcard/android/layout_tests/fast/replaced/max-width-percent.html +/sdcard/android/layout_tests/fast/replaced/absolute-position-percentage-height.html +/sdcard/android/layout_tests/fast/replaced/002.html +/sdcard/android/layout_tests/fast/replaced/004.html +/sdcard/android/layout_tests/fast/replaced/width100percent-checkbox.html +/sdcard/android/layout_tests/fast/replaced/applet-disabled-positioned.html +/sdcard/android/layout_tests/fast/replaced/006.html +/sdcard/android/layout_tests/fast/replaced/008.html +/sdcard/android/layout_tests/fast/replaced/percent-height-in-anonymous-block-widget.html +/sdcard/android/layout_tests/fast/replaced/minheight-percent.html +/sdcard/android/layout_tests/fast/replaced/maxheight-percent.html +/sdcard/android/layout_tests/fast/replaced/absolute-position-with-auto-width-and-left-and-right.html +/sdcard/android/layout_tests/fast/replaced/minwidth-percent.html +/sdcard/android/layout_tests/fast/replaced/maxwidth-percent.html +/sdcard/android/layout_tests/fast/replaced/applet-rendering-java-disabled.html +/sdcard/android/layout_tests/fast/replaced/selection-rect-in-table-cell.html +/sdcard/android/layout_tests/fast/replaced/percent-height-in-anonymous-block.html +/sdcard/android/layout_tests/fast/replaced/three-selects-break.html +/sdcard/android/layout_tests/fast/replaced/width100percent-button.html +/sdcard/android/layout_tests/fast/replaced/image-tag.html +/sdcard/android/layout_tests/fast/replaced/image-onload.html +/sdcard/android/layout_tests/fast/replaced/image-resize-width.html +/sdcard/android/layout_tests/fast/replaced/absolute-image-sizing.html +/sdcard/android/layout_tests/fast/replaced/replaced-breaking.html +/sdcard/android/layout_tests/fast/replaced/001.html +/sdcard/android/layout_tests/fast/replaced/width100percent-image.html +/sdcard/android/layout_tests/fast/replaced/image-solid-color-with-alpha.html +/sdcard/android/layout_tests/fast/replaced/003.html +/sdcard/android/layout_tests/fast/replaced/replaced-child-of-absolute-with-auto-height.html +/sdcard/android/layout_tests/fast/replaced/005.html +/sdcard/android/layout_tests/fast/replaced/007.html +/sdcard/android/layout_tests/fast/replaced/absolute-position-with-auto-height-and-top-and-bottom.html +/sdcard/android/layout_tests/fast/replaced/width100percent-textfield.html +/sdcard/android/layout_tests/fast/replaced/absolute-position-percentage-width.html +/sdcard/android/layout_tests/fast/dynamic/positioned-movement-with-positioned-children.html +/sdcard/android/layout_tests/fast/dynamic/subtree-table-cell-height.html +/sdcard/android/layout_tests/fast/dynamic/move-node-with-selection.html +/sdcard/android/layout_tests/fast/dynamic/create-renderer-for-whitespace-only-text.html +/sdcard/android/layout_tests/fast/dynamic/outerHTML-doc.html +/sdcard/android/layout_tests/fast/dynamic/floating-to-positioned-2.html +/sdcard/android/layout_tests/fast/dynamic/012.html +/sdcard/android/layout_tests/fast/dynamic/004.html +/sdcard/android/layout_tests/fast/dynamic/008.html +/sdcard/android/layout_tests/fast/dynamic/float-no-longer-overhanging.html +/sdcard/android/layout_tests/fast/dynamic/float-withdrawal-2.html +/sdcard/android/layout_tests/fast/dynamic/float-in-trailing-whitespace-after-last-line-break.html +/sdcard/android/layout_tests/fast/dynamic/selection-highlight-adjust.html +/sdcard/android/layout_tests/fast/dynamic/subtree-no-common-root-static-y.html +/sdcard/android/layout_tests/fast/dynamic/genContentDestroyChildren.html +/sdcard/android/layout_tests/fast/dynamic/001.html +/sdcard/android/layout_tests/fast/dynamic/link-href-change.html +/sdcard/android/layout_tests/fast/dynamic/013.html +/sdcard/android/layout_tests/fast/dynamic/005.html +/sdcard/android/layout_tests/fast/dynamic/009.html +/sdcard/android/layout_tests/fast/dynamic/float-withdrawal.html +/sdcard/android/layout_tests/fast/dynamic/anonymous-block-layer-lost.html +/sdcard/android/layout_tests/fast/dynamic/layer-hit-test-crash.html +/sdcard/android/layout_tests/fast/dynamic/view-overflow.html +/sdcard/android/layout_tests/fast/dynamic/010.html +/sdcard/android/layout_tests/fast/dynamic/002.html +/sdcard/android/layout_tests/fast/dynamic/014.html +/sdcard/android/layout_tests/fast/dynamic/006.html +/sdcard/android/layout_tests/fast/dynamic/flash-replacement-test.html +/sdcard/android/layout_tests/fast/dynamic/insert-before-table-part-in-continuation.html +/sdcard/android/layout_tests/fast/dynamic/staticY.html +/sdcard/android/layout_tests/fast/dynamic/anonymous-block-orphaned-lines.html +/sdcard/android/layout_tests/fast/dynamic/noninlinebadness.html +/sdcard/android/layout_tests/fast/dynamic/subtree-parent-static-y.html +/sdcard/android/layout_tests/fast/dynamic/outerHTML-img.html +/sdcard/android/layout_tests/fast/dynamic/staticY-marking-parents-regression.html +/sdcard/android/layout_tests/fast/dynamic/floating-to-positioned.html +/sdcard/android/layout_tests/fast/dynamic/subtree-boundary-percent-height.html +/sdcard/android/layout_tests/fast/dynamic/011.html +/sdcard/android/layout_tests/fast/dynamic/containing-block-change.html +/sdcard/android/layout_tests/fast/dynamic/015.html +/sdcard/android/layout_tests/fast/dynamic/007.html +/sdcard/android/layout_tests/fast/text/firstline/001.html +/sdcard/android/layout_tests/fast/text/firstline/002.html +/sdcard/android/layout_tests/fast/text/firstline/003.html /sdcard/android/layout_tests/fast/text/international/wrap-CJK-001.html -/sdcard/android/layout_tests/fast/text/international/thai-line-breaks.html -/sdcard/android/layout_tests/fast/text/international/rtl-white-space-pre-wrap.html -/sdcard/android/layout_tests/fast/text/international/rtl-caret.html +/sdcard/android/layout_tests/fast/text/international/bidi-listbox-atsui.html /sdcard/android/layout_tests/fast/text/international/hindi-spacing.html -/sdcard/android/layout_tests/fast/text/international/complex-character-based-fallback.html -/sdcard/android/layout_tests/fast/text/international/bidi-override.html +/sdcard/android/layout_tests/fast/text/international/thai-line-breaks.html /sdcard/android/layout_tests/fast/text/international/bidi-neutral-run.html -/sdcard/android/layout_tests/fast/text/international/bidi-neutral-directionality-paragraph-start.html -/sdcard/android/layout_tests/fast/text/international/bidi-menulist.html -/sdcard/android/layout_tests/fast/text/international/bidi-listbox.html -/sdcard/android/layout_tests/fast/text/international/bidi-listbox-atsui.html -/sdcard/android/layout_tests/fast/text/international/bidi-LDB-2-HTML.html -/sdcard/android/layout_tests/fast/text/international/bidi-LDB-2-formatting-characters.html -/sdcard/android/layout_tests/fast/text/international/bidi-LDB-2-CSS.html -/sdcard/android/layout_tests/fast/text/international/bidi-layout-across-linebreak.html /sdcard/android/layout_tests/fast/text/international/bidi-L2-run-reordering.html +/sdcard/android/layout_tests/fast/text/international/bidi-override.html /sdcard/android/layout_tests/fast/text/international/bidi-innertext.html -/sdcard/android/layout_tests/fast/text/international/bidi-ignored-for-first-child-inline.html -/sdcard/android/layout_tests/fast/text/international/bidi-explicit-embedding.html /sdcard/android/layout_tests/fast/text/international/bidi-european-terminators.html -/sdcard/android/layout_tests/fast/text/international/bidi-CS-after-AN.html -/sdcard/android/layout_tests/fast/text/international/bidi-control-chars-treated-as-ZWS.html +/sdcard/android/layout_tests/fast/text/international/bidi-listbox.html +/sdcard/android/layout_tests/fast/text/international/bidi-LDB-2-formatting-characters.html /sdcard/android/layout_tests/fast/text/international/bidi-AN-after-L.html +/sdcard/android/layout_tests/fast/text/international/bidi-LDB-2-CSS.html +/sdcard/android/layout_tests/fast/text/international/bidi-control-chars-treated-as-ZWS.html +/sdcard/android/layout_tests/fast/text/international/rtl-caret.html +/sdcard/android/layout_tests/fast/text/international/bidi-neutral-directionality-paragraph-start.html /sdcard/android/layout_tests/fast/text/international/bidi-AN-after-empty-run.html -/sdcard/android/layout_tests/fast/text/international/003.html -/sdcard/android/layout_tests/fast/text/international/002.html /sdcard/android/layout_tests/fast/text/international/001.html -/sdcard/android/layout_tests/fast/text/firstline/003.html -/sdcard/android/layout_tests/fast/text/firstline/002.html -/sdcard/android/layout_tests/fast/text/firstline/001.html -/sdcard/android/layout_tests/fast/text/basic/generic-family-reset.html +/sdcard/android/layout_tests/fast/text/international/002.html +/sdcard/android/layout_tests/fast/text/international/bidi-ignored-for-first-child-inline.html +/sdcard/android/layout_tests/fast/text/international/bidi-explicit-embedding.html +/sdcard/android/layout_tests/fast/text/international/003.html +/sdcard/android/layout_tests/fast/text/international/rtl-white-space-pre-wrap.html +/sdcard/android/layout_tests/fast/text/international/bidi-layout-across-linebreak.html +/sdcard/android/layout_tests/fast/text/international/bidi-CS-after-AN.html +/sdcard/android/layout_tests/fast/text/international/bidi-menulist.html +/sdcard/android/layout_tests/fast/text/international/bidi-LDB-2-HTML.html +/sdcard/android/layout_tests/fast/text/international/complex-character-based-fallback.html +/sdcard/android/layout_tests/fast/text/whitespace/pre-wrap-overflow-selection.html +/sdcard/android/layout_tests/fast/text/whitespace/pre-newline-box-test.html +/sdcard/android/layout_tests/fast/text/whitespace/span-in-word-space-causes-overflow.html +/sdcard/android/layout_tests/fast/text/whitespace/nowrap-clear-float.html +/sdcard/android/layout_tests/fast/text/whitespace/pre-wrap-line-test.html +/sdcard/android/layout_tests/fast/text/whitespace/010.html +/sdcard/android/layout_tests/fast/text/whitespace/020.html +/sdcard/android/layout_tests/fast/text/whitespace/002.html +/sdcard/android/layout_tests/fast/text/whitespace/030.html +/sdcard/android/layout_tests/fast/text/whitespace/012.html +/sdcard/android/layout_tests/fast/text/whitespace/022.html +/sdcard/android/layout_tests/fast/text/whitespace/004.html +/sdcard/android/layout_tests/fast/text/whitespace/014.html +/sdcard/android/layout_tests/fast/text/whitespace/024.html +/sdcard/android/layout_tests/fast/text/whitespace/006.html +/sdcard/android/layout_tests/fast/text/whitespace/016.html +/sdcard/android/layout_tests/fast/text/whitespace/008.html +/sdcard/android/layout_tests/fast/text/whitespace/026.html +/sdcard/android/layout_tests/fast/text/whitespace/018.html +/sdcard/android/layout_tests/fast/text/whitespace/028.html +/sdcard/android/layout_tests/fast/text/whitespace/normal-after-nowrap-breaking.html +/sdcard/android/layout_tests/fast/text/whitespace/pre-break-word.html +/sdcard/android/layout_tests/fast/text/whitespace/nbsp-mode-and-linewraps.html +/sdcard/android/layout_tests/fast/text/whitespace/001.html +/sdcard/android/layout_tests/fast/text/whitespace/011.html +/sdcard/android/layout_tests/fast/text/whitespace/tab-character-basics.html +/sdcard/android/layout_tests/fast/text/whitespace/003.html +/sdcard/android/layout_tests/fast/text/whitespace/021.html +/sdcard/android/layout_tests/fast/text/whitespace/013.html +/sdcard/android/layout_tests/fast/text/whitespace/005.html +/sdcard/android/layout_tests/fast/text/whitespace/023.html +/sdcard/android/layout_tests/fast/text/whitespace/015.html +/sdcard/android/layout_tests/fast/text/whitespace/025.html +/sdcard/android/layout_tests/fast/text/whitespace/007.html +/sdcard/android/layout_tests/fast/text/whitespace/017.html +/sdcard/android/layout_tests/fast/text/whitespace/pre-wrap-spaces-after-newline.html +/sdcard/android/layout_tests/fast/text/whitespace/027.html +/sdcard/android/layout_tests/fast/text/whitespace/009.html +/sdcard/android/layout_tests/fast/text/whitespace/019.html +/sdcard/android/layout_tests/fast/text/whitespace/pre-wrap-last-char.html +/sdcard/android/layout_tests/fast/text/whitespace/029.html +/sdcard/android/layout_tests/fast/text/basic/001.html +/sdcard/android/layout_tests/fast/text/basic/002.html +/sdcard/android/layout_tests/fast/text/basic/011.html /sdcard/android/layout_tests/fast/text/basic/generic-family-changes.html -/sdcard/android/layout_tests/fast/text/basic/015.html -/sdcard/android/layout_tests/fast/text/basic/014.html -/sdcard/android/layout_tests/fast/text/basic/013.html +/sdcard/android/layout_tests/fast/text/basic/003.html /sdcard/android/layout_tests/fast/text/basic/012.html -/sdcard/android/layout_tests/fast/text/basic/011.html -/sdcard/android/layout_tests/fast/text/basic/009.html -/sdcard/android/layout_tests/fast/text/basic/008.html -/sdcard/android/layout_tests/fast/text/basic/007.html -/sdcard/android/layout_tests/fast/text/basic/006.html -/sdcard/android/layout_tests/fast/text/basic/005.html /sdcard/android/layout_tests/fast/text/basic/004.html -/sdcard/android/layout_tests/fast/text/basic/003.html -/sdcard/android/layout_tests/fast/text/basic/002.html -/sdcard/android/layout_tests/fast/text/basic/001.html -/sdcard/android/layout_tests/fast/text/word-space.html +/sdcard/android/layout_tests/fast/text/basic/013.html +/sdcard/android/layout_tests/fast/text/basic/005.html +/sdcard/android/layout_tests/fast/text/basic/014.html +/sdcard/android/layout_tests/fast/text/basic/006.html +/sdcard/android/layout_tests/fast/text/basic/015.html +/sdcard/android/layout_tests/fast/text/basic/007.html +/sdcard/android/layout_tests/fast/text/basic/008.html +/sdcard/android/layout_tests/fast/text/basic/009.html +/sdcard/android/layout_tests/fast/text/basic/generic-family-reset.html +/sdcard/android/layout_tests/fast/text/in-rendered-text-rtl.html +/sdcard/android/layout_tests/fast/text/selection-painted-separately.html +/sdcard/android/layout_tests/fast/text/bidi-embedding-pop-and-push-same.html +/sdcard/android/layout_tests/fast/text/wbr-in-pre-crash.html +/sdcard/android/layout_tests/fast/text/atsui-spacing-features.html +/sdcard/android/layout_tests/fast/text/textIteratorNilRenderer.html +/sdcard/android/layout_tests/fast/text/drawBidiText.html +/sdcard/android/layout_tests/fast/text/selection-hard-linebreak.html /sdcard/android/layout_tests/fast/text/word-break.html -/sdcard/android/layout_tests/fast/text/word-break-soft-hyphen.html -/sdcard/android/layout_tests/fast/text/word-break-run-rounding.html -/sdcard/android/layout_tests/fast/text/wide-zero-width-space.html +/sdcard/android/layout_tests/fast/text/font-initial.html +/sdcard/android/layout_tests/fast/text/break-word.html +/sdcard/android/layout_tests/fast/text/stroking.html +/sdcard/android/layout_tests/fast/text/midword-break-hang.html +/sdcard/android/layout_tests/fast/text/atsui-partial-selection.html +/sdcard/android/layout_tests/fast/text/embed-at-end-of-pre-wrap-line.html +/sdcard/android/layout_tests/fast/text/atsui-multiple-renderers.html +/sdcard/android/layout_tests/fast/text/apply-start-width-after-skipped-text.html +/sdcard/android/layout_tests/fast/text/capitalize-preserve-nbsp.html +/sdcard/android/layout_tests/fast/text/updateNewFont.html +/sdcard/android/layout_tests/fast/text/atsui-rtl-override-selection.html +/sdcard/android/layout_tests/fast/text/align-center-rtl-spill.html /sdcard/android/layout_tests/fast/text/wbr.html -/sdcard/android/layout_tests/fast/text/wbr-styled.html +/sdcard/android/layout_tests/fast/text/cg-vs-atsui.html +/sdcard/android/layout_tests/fast/text/monospace-width-cache.html +/sdcard/android/layout_tests/fast/text/soft-hyphen-2.html +/sdcard/android/layout_tests/fast/text/justified-selection.html +/sdcard/android/layout_tests/fast/text/atsui-pointtooffset-calls-cg.html +/sdcard/android/layout_tests/fast/text/atsui-kerning-and-ligatures.html /sdcard/android/layout_tests/fast/text/wbr-pre.html -/sdcard/android/layout_tests/fast/text/wbr-in-pre-crash.html -/sdcard/android/layout_tests/fast/text/updateNewFont.html +/sdcard/android/layout_tests/fast/text/capitalize-boundaries.html /sdcard/android/layout_tests/fast/text/trailing-white-space.html -/sdcard/android/layout_tests/fast/text/trailing-white-space-2.html -/sdcard/android/layout_tests/fast/text/textIteratorNilRenderer.html -/sdcard/android/layout_tests/fast/text/stroking.html -/sdcard/android/layout_tests/fast/text/stroking-decorations.html +/sdcard/android/layout_tests/fast/text/capitalize-empty-generated-string.html /sdcard/android/layout_tests/fast/text/stripNullFromText.html -/sdcard/android/layout_tests/fast/text/softHyphen.html +/sdcard/android/layout_tests/fast/text/letter-spacing-negative-opacity.html +/sdcard/android/layout_tests/fast/text/atsui-small-caps-punctuation-size.html +/sdcard/android/layout_tests/fast/text/word-break-soft-hyphen.html +/sdcard/android/layout_tests/fast/text/fixed-pitch-control-characters.html +/sdcard/android/layout_tests/fast/text/cg-fallback-bolding.html +/sdcard/android/layout_tests/fast/text/line-breaks-after-white-space.html /sdcard/android/layout_tests/fast/text/soft-hyphen-3.html -/sdcard/android/layout_tests/fast/text/soft-hyphen-2.html +/sdcard/android/layout_tests/fast/text/wide-zero-width-space.html /sdcard/android/layout_tests/fast/text/should-use-atsui.html +/sdcard/android/layout_tests/fast/text/justified-selection-at-edge.html +/sdcard/android/layout_tests/fast/text/trailing-white-space-2.html +/sdcard/android/layout_tests/fast/text/word-break-run-rounding.html +/sdcard/android/layout_tests/fast/text/softHyphen.html +/sdcard/android/layout_tests/fast/text/delete-hard-break-character.html +/sdcard/android/layout_tests/fast/text/line-breaks.html +/sdcard/android/layout_tests/fast/text/wbr-styled.html +/sdcard/android/layout_tests/fast/text/large-text-composed-char.html /sdcard/android/layout_tests/fast/text/shadow-no-blur.html -/sdcard/android/layout_tests/fast/text/selection-painted-separately.html -/sdcard/android/layout_tests/fast/text/selection-hard-linebreak.html /sdcard/android/layout_tests/fast/text/reset-emptyRun.html -/sdcard/android/layout_tests/fast/text/monospace-width-cache.html -/sdcard/android/layout_tests/fast/text/midword-break-hang.html +/sdcard/android/layout_tests/fast/text/word-space.html /sdcard/android/layout_tests/fast/text/midword-break-after-breakable-char.html -/sdcard/android/layout_tests/fast/text/line-breaks.html -/sdcard/android/layout_tests/fast/text/line-breaks-after-white-space.html -/sdcard/android/layout_tests/fast/text/letter-spacing-negative-opacity.html -/sdcard/android/layout_tests/fast/text/large-text-composed-char.html -/sdcard/android/layout_tests/fast/text/justified-selection.html -/sdcard/android/layout_tests/fast/text/justified-selection-at-edge.html -/sdcard/android/layout_tests/fast/text/in-rendered-text-rtl.html -/sdcard/android/layout_tests/fast/text/font-initial.html -/sdcard/android/layout_tests/fast/text/fixed-pitch-control-characters.html -/sdcard/android/layout_tests/fast/text/embed-at-end-of-pre-wrap-line.html -/sdcard/android/layout_tests/fast/text/drawBidiText.html -/sdcard/android/layout_tests/fast/text/delete-hard-break-character.html -/sdcard/android/layout_tests/fast/text/cg-vs-atsui.html -/sdcard/android/layout_tests/fast/text/cg-fallback-bolding.html -/sdcard/android/layout_tests/fast/text/capitalize-preserve-nbsp.html -/sdcard/android/layout_tests/fast/text/capitalize-empty-generated-string.html -/sdcard/android/layout_tests/fast/text/capitalize-boundaries.html -/sdcard/android/layout_tests/fast/text/break-word.html -/sdcard/android/layout_tests/fast/text/bidi-embedding-pop-and-push-same.html -/sdcard/android/layout_tests/fast/text/atsui-spacing-features.html -/sdcard/android/layout_tests/fast/text/atsui-small-caps-punctuation-size.html -/sdcard/android/layout_tests/fast/text/atsui-rtl-override-selection.html -/sdcard/android/layout_tests/fast/text/atsui-pointtooffset-calls-cg.html -/sdcard/android/layout_tests/fast/text/atsui-partial-selection.html -/sdcard/android/layout_tests/fast/text/atsui-multiple-renderers.html -/sdcard/android/layout_tests/fast/text/atsui-kerning-and-ligatures.html -/sdcard/android/layout_tests/fast/text/apply-start-width-after-skipped-text.html -/sdcard/android/layout_tests/fast/text/align-center-rtl-spill.html -/sdcard/android/layout_tests/fast/table/border-collapsing/rtl-border-collapsing.html -/sdcard/android/layout_tests/fast/table/border-collapsing/equal-precedence-resolution.html -/sdcard/android/layout_tests/fast/table/border-collapsing/border-collapsing-head-foot.html -/sdcard/android/layout_tests/fast/table/border-collapsing/004.html -/sdcard/android/layout_tests/fast/table/border-collapsing/003.html -/sdcard/android/layout_tests/fast/table/border-collapsing/002.html -/sdcard/android/layout_tests/fast/table/border-collapsing/001.html -/sdcard/android/layout_tests/fast/table/wide-column.html -/sdcard/android/layout_tests/fast/table/wide-colspan.html -/sdcard/android/layout_tests/fast/table/vertical-align-baseline.html -/sdcard/android/layout_tests/fast/table/vertical-align-baseline-readjust.html -/sdcard/android/layout_tests/fast/table/unused-percent-heights.html -/sdcard/android/layout_tests/fast/table/unbreakable-images-quirk.html -/sdcard/android/layout_tests/fast/table/text-field-baseline.html -/sdcard/android/layout_tests/fast/table/tableInsideCaption.html -/sdcard/android/layout_tests/fast/table/table-hspace-align-center.html -/sdcard/android/layout_tests/fast/table/table-display-types.html -/sdcard/android/layout_tests/fast/table/table-display-types-strict.html -/sdcard/android/layout_tests/fast/table/stale-grid-crash.html -/sdcard/android/layout_tests/fast/table/spanOverlapRepaint.html -/sdcard/android/layout_tests/fast/table/rules-attr-dynchange2.html -/sdcard/android/layout_tests/fast/table/rules-attr-dynchange1.html -/sdcard/android/layout_tests/fast/table/rtl-cell-display-none-assert.html -/sdcard/android/layout_tests/fast/table/rowspan-paint-order.html -/sdcard/android/layout_tests/fast/table/rowindex.html -/sdcard/android/layout_tests/fast/table/row-height-recalc.html -/sdcard/android/layout_tests/fast/table/replaced-percent-height.html -/sdcard/android/layout_tests/fast/table/remove-td-display-none.html -/sdcard/android/layout_tests/fast/table/prepend-in-anonymous-table.html -/sdcard/android/layout_tests/fast/table/percent-widths-stretch.html -/sdcard/android/layout_tests/fast/table/percent-heights.html -/sdcard/android/layout_tests/fast/table/overflowHidden.html -/sdcard/android/layout_tests/fast/table/nobr.html -/sdcard/android/layout_tests/fast/table/nested-percent-height-table.html -/sdcard/android/layout_tests/fast/table/multiple-percent-height-rows.html -/sdcard/android/layout_tests/fast/table/max-width-integer-overflow.html -/sdcard/android/layout_tests/fast/table/large-width.html -/sdcard/android/layout_tests/fast/table/invisible-cell-background.html -/sdcard/android/layout_tests/fast/table/insert-row-before-form.html -/sdcard/android/layout_tests/fast/table/insert-cell-before-form.html -/sdcard/android/layout_tests/fast/table/insert-before-anonymous-ancestors.html -/sdcard/android/layout_tests/fast/table/inline-form-assert.html -/sdcard/android/layout_tests/fast/table/height-percent-test.html -/sdcard/android/layout_tests/fast/table/growCellForImageQuirk.html -/sdcard/android/layout_tests/fast/table/giantRowspan2.html -/sdcard/android/layout_tests/fast/table/giantRowspan.html -/sdcard/android/layout_tests/fast/table/giantCellspacing.html -/sdcard/android/layout_tests/fast/table/generated-caption.html -/sdcard/android/layout_tests/fast/table/frame-and-rules.html -/sdcard/android/layout_tests/fast/table/form-with-table-style.html -/sdcard/android/layout_tests/fast/table/floating-th.html -/sdcard/android/layout_tests/fast/table/fixed-with-auto-with-colspan.html -/sdcard/android/layout_tests/fast/table/fixed-table-non-cell-in-row.html -/sdcard/android/layout_tests/fast/table/fixed-nested.html -/sdcard/android/layout_tests/fast/table/empty-table-percent-height.html -/sdcard/android/layout_tests/fast/table/empty-section-crash.html -/sdcard/android/layout_tests/fast/table/empty-row-crash.html -/sdcard/android/layout_tests/fast/table/empty-cells.html -/sdcard/android/layout_tests/fast/table/edge-offsets.html -/sdcard/android/layout_tests/fast/table/dynamic-cellpadding.html -/sdcard/android/layout_tests/fast/table/div-as-col-span.html -/sdcard/android/layout_tests/fast/table/colgroup-spanning-groups-rules.html -/sdcard/android/layout_tests/fast/table/colgroup-preceded-by-caption.html -/sdcard/android/layout_tests/fast/table/click-near-anonymous-table.html -/sdcard/android/layout_tests/fast/table/cellindex.html -/sdcard/android/layout_tests/fast/table/cell-pref-width-invalidation.html -/sdcard/android/layout_tests/fast/table/cell-width-auto.html -/sdcard/android/layout_tests/fast/table/cell-absolute-child.html -/sdcard/android/layout_tests/fast/table/caption-relayout.html -/sdcard/android/layout_tests/fast/table/auto-with-percent-height.html -/sdcard/android/layout_tests/fast/table/append-cells2.html -/sdcard/android/layout_tests/fast/table/append-cells.html -/sdcard/android/layout_tests/fast/table/add-before-anonymous-child.html -/sdcard/android/layout_tests/fast/table/absolute-table-at-bottom.html -/sdcard/android/layout_tests/fast/table/100-percent-cell-width.html -/sdcard/android/layout_tests/fast/table/041.html -/sdcard/android/layout_tests/fast/table/040.html -/sdcard/android/layout_tests/fast/table/039.html -/sdcard/android/layout_tests/fast/table/038.html -/sdcard/android/layout_tests/fast/table/037.xml -/sdcard/android/layout_tests/fast/table/036.html -/sdcard/android/layout_tests/fast/table/035.html -/sdcard/android/layout_tests/fast/table/034.html -/sdcard/android/layout_tests/fast/table/033.html -/sdcard/android/layout_tests/fast/table/032.html -/sdcard/android/layout_tests/fast/table/031.html -/sdcard/android/layout_tests/fast/table/030.html -/sdcard/android/layout_tests/fast/table/029.html -/sdcard/android/layout_tests/fast/table/028.html -/sdcard/android/layout_tests/fast/table/027.html -/sdcard/android/layout_tests/fast/table/026.html -/sdcard/android/layout_tests/fast/table/025.html -/sdcard/android/layout_tests/fast/table/024.html -/sdcard/android/layout_tests/fast/table/023.html -/sdcard/android/layout_tests/fast/table/022.html -/sdcard/android/layout_tests/fast/table/021.html -/sdcard/android/layout_tests/fast/table/020.html -/sdcard/android/layout_tests/fast/table/018.html -/sdcard/android/layout_tests/fast/table/017.html -/sdcard/android/layout_tests/fast/table/016.html -/sdcard/android/layout_tests/fast/table/015.html -/sdcard/android/layout_tests/fast/table/014.html -/sdcard/android/layout_tests/fast/table/013.html -/sdcard/android/layout_tests/fast/table/012.html -/sdcard/android/layout_tests/fast/table/011.html -/sdcard/android/layout_tests/fast/table/010.html -/sdcard/android/layout_tests/fast/table/009.html -/sdcard/android/layout_tests/fast/table/008.html -/sdcard/android/layout_tests/fast/table/007.html -/sdcard/android/layout_tests/fast/table/006.html -/sdcard/android/layout_tests/fast/table/005.html -/sdcard/android/layout_tests/fast/table/004.html -/sdcard/android/layout_tests/fast/table/003.html -/sdcard/android/layout_tests/fast/table/002.html -/sdcard/android/layout_tests/fast/table/001.html -/sdcard/android/layout_tests/fast/selectors/unqualified-hover-strict.html -/sdcard/android/layout_tests/fast/selectors/unqualified-hover-quirks.html -/sdcard/android/layout_tests/fast/selectors/nondeterministic-combinators.html -/sdcard/android/layout_tests/fast/selectors/lang-vs-xml-lang.html -/sdcard/android/layout_tests/fast/selectors/lang-inheritance2.html -/sdcard/android/layout_tests/fast/selectors/lang-inheritance.html -/sdcard/android/layout_tests/fast/selectors/177b.html -/sdcard/android/layout_tests/fast/selectors/177a.html -/sdcard/android/layout_tests/fast/selectors/175c.html -/sdcard/android/layout_tests/fast/selectors/175b.html +/sdcard/android/layout_tests/fast/text/stroking-decorations.html +/sdcard/android/layout_tests/fast/encoding/utf-16-little-endian.html +/sdcard/android/layout_tests/fast/encoding/denormalised-voiced-japanese-chars.html +/sdcard/android/layout_tests/fast/encoding/utf-16-no-bom.xml +/sdcard/android/layout_tests/fast/encoding/utf-16-big-endian.html +/sdcard/android/layout_tests/fast/encoding/xmacroman-encoding-test.html +/sdcard/android/layout_tests/fast/encoding/invalid-UTF-8.html +/sdcard/android/layout_tests/fast/multicol/negativeColumnWidth.html +/sdcard/android/layout_tests/fast/multicol/column-rules.html +/sdcard/android/layout_tests/fast/multicol/zeroColumnCount.html +/sdcard/android/layout_tests/fast/multicol/columns-shorthand-parsing.html +/sdcard/android/layout_tests/fast/multicol/float-multicol.html +/sdcard/android/layout_tests/fast/doctypes/001.html +/sdcard/android/layout_tests/fast/doctypes/002.html +/sdcard/android/layout_tests/fast/doctypes/003.html +/sdcard/android/layout_tests/fast/doctypes/004.html +/sdcard/android/layout_tests/fast/css-generated-content/table-row-group-to-inline.html +/sdcard/android/layout_tests/fast/css-generated-content/spellingToolTip-assert.html +/sdcard/android/layout_tests/fast/css-generated-content/no-openclose-quote.html +/sdcard/android/layout_tests/fast/css-generated-content/before-with-first-letter.html +/sdcard/android/layout_tests/fast/css-generated-content/table-row-group-with-before.html +/sdcard/android/layout_tests/fast/css-generated-content/010.html +/sdcard/android/layout_tests/fast/css-generated-content/table-with-before.html +/sdcard/android/layout_tests/fast/css-generated-content/002.html +/sdcard/android/layout_tests/fast/css-generated-content/012.html +/sdcard/android/layout_tests/fast/css-generated-content/004.html +/sdcard/android/layout_tests/fast/css-generated-content/014.html +/sdcard/android/layout_tests/fast/css-generated-content/016.html +/sdcard/android/layout_tests/fast/css-generated-content/008.html +/sdcard/android/layout_tests/fast/css-generated-content/after-order.html +/sdcard/android/layout_tests/fast/css-generated-content/table-cell-before-content.html +/sdcard/android/layout_tests/fast/css-generated-content/visibleContentHiddenParent.html +/sdcard/android/layout_tests/fast/css-generated-content/inline-display-types.html +/sdcard/android/layout_tests/fast/css-generated-content/positioned-background-hit-test-crash.html +/sdcard/android/layout_tests/fast/css-generated-content/001.html +/sdcard/android/layout_tests/fast/css-generated-content/011.html +/sdcard/android/layout_tests/fast/css-generated-content/003.html +/sdcard/android/layout_tests/fast/css-generated-content/013.html +/sdcard/android/layout_tests/fast/css-generated-content/005.html +/sdcard/android/layout_tests/fast/css-generated-content/hover-style-change.html +/sdcard/android/layout_tests/fast/css-generated-content/absolute-position-inside-inline.html +/sdcard/android/layout_tests/fast/css-generated-content/015.html +/sdcard/android/layout_tests/fast/css-generated-content/table-row-with-before.html +/sdcard/android/layout_tests/fast/css-generated-content/007.html +/sdcard/android/layout_tests/fast/css-generated-content/009.html +/sdcard/android/layout_tests/fast/css-generated-content/wbr-with-before-content.html +/sdcard/android/layout_tests/fast/workers/stress-js-execution.html : has expected results +/sdcard/android/layout_tests/fast/lists/decimal-leading-zero.html +/sdcard/android/layout_tests/fast/lists/ol-display-types.html +/sdcard/android/layout_tests/fast/lists/li-style-alpha-huge-value-crash.html +/sdcard/android/layout_tests/fast/lists/ol-start-dynamic.html +/sdcard/android/layout_tests/fast/lists/numeric-markers-outside-list.html +/sdcard/android/layout_tests/fast/lists/marker-image-error.html +/sdcard/android/layout_tests/fast/lists/marker-before-empty-inline.html +/sdcard/android/layout_tests/fast/lists/scrolled-marker-paint.html +/sdcard/android/layout_tests/fast/lists/li-values.html +/sdcard/android/layout_tests/fast/lists/002.html +/sdcard/android/layout_tests/fast/lists/dynamic-marker-crash.html +/sdcard/android/layout_tests/fast/lists/list-item-line-height.html +/sdcard/android/layout_tests/fast/lists/004.html +/sdcard/android/layout_tests/fast/lists/drag-into-marker.html +/sdcard/android/layout_tests/fast/lists/list-style-none-crash.html +/sdcard/android/layout_tests/fast/lists/alpha-list-wrap.html +/sdcard/android/layout_tests/fast/lists/006.html +/sdcard/android/layout_tests/fast/lists/008.html +/sdcard/android/layout_tests/fast/lists/inlineBoxWrapperNullCheck.html +/sdcard/android/layout_tests/fast/lists/w3-list-styles.html +/sdcard/android/layout_tests/fast/lists/item-not-in-list-line-wrapping.html +/sdcard/android/layout_tests/fast/lists/olstart.html +/sdcard/android/layout_tests/fast/lists/big-list-marker.html +/sdcard/android/layout_tests/fast/lists/markers-in-selection.html +/sdcard/android/layout_tests/fast/lists/list-style-type-dynamic-change.html +/sdcard/android/layout_tests/fast/lists/001.html +/sdcard/android/layout_tests/fast/lists/ordered-list-with-no-ol-tag.html +/sdcard/android/layout_tests/fast/lists/003.html +/sdcard/android/layout_tests/fast/lists/005.html +/sdcard/android/layout_tests/fast/lists/li-br.html +/sdcard/android/layout_tests/fast/lists/007.html +/sdcard/android/layout_tests/fast/lists/009.html +/sdcard/android/layout_tests/fast/transforms/transform-overflow.html +/sdcard/android/layout_tests/fast/transforms/transforms-with-opacity.html +/sdcard/android/layout_tests/fast/transforms/transformed-caret.html +/sdcard/android/layout_tests/fast/transforms/matrix-01.html +/sdcard/android/layout_tests/fast/transforms/transform-positioned-ancestor.html +/sdcard/android/layout_tests/fast/transforms/matrix-02.html +/sdcard/android/layout_tests/fast/transforms/skew-with-unitless-zero.html +/sdcard/android/layout_tests/fast/transforms/overflow-with-transform.html +/sdcard/android/layout_tests/fast/transforms/transformed-document-element.html +/sdcard/android/layout_tests/fast/transforms/shadows.html +/sdcard/android/layout_tests/fast/transforms/transformed-focused-text-input.html +/sdcard/android/layout_tests/fast/transforms/diamond.html +/sdcard/android/layout_tests/fast/transforms/identity-matrix.html +/sdcard/android/layout_tests/fast/innerHTML/001.html +/sdcard/android/layout_tests/fast/innerHTML/002.html +/sdcard/android/layout_tests/fast/innerHTML/003.html +/sdcard/android/layout_tests/fast/innerHTML/006.html +/sdcard/android/layout_tests/fast/borders/borderRadiusSolid01.html +/sdcard/android/layout_tests/fast/borders/borderRadiusDouble01.html +/sdcard/android/layout_tests/fast/borders/block-mask-overlay-image.html +/sdcard/android/layout_tests/fast/borders/borderRadiusSolid03.html +/sdcard/android/layout_tests/fast/borders/borderRadiusDouble03.html +/sdcard/android/layout_tests/fast/borders/border-color-inherit.html +/sdcard/android/layout_tests/fast/borders/svg-as-border-image-2.html +/sdcard/android/layout_tests/fast/borders/borderRadiusInvalidColor.html +/sdcard/android/layout_tests/fast/borders/border-image-scale-transform.html +/sdcard/android/layout_tests/fast/borders/borderRadiusDotted02.html +/sdcard/android/layout_tests/fast/borders/border-fit.html +/sdcard/android/layout_tests/fast/borders/borderRadiusArcs01.html +/sdcard/android/layout_tests/fast/borders/borderRadiusDashed01.html +/sdcard/android/layout_tests/fast/borders/borderRadiusDashed03.html +/sdcard/android/layout_tests/fast/borders/fieldsetBorderRadius.html +/sdcard/android/layout_tests/fast/borders/borderRadiusAllStylesAllCorners.html +/sdcard/android/layout_tests/fast/borders/borderRadiusGroove01.html +/sdcard/android/layout_tests/fast/borders/border-image-omit-right-slice.html +/sdcard/android/layout_tests/fast/borders/borderRadiusDouble02.html +/sdcard/android/layout_tests/fast/borders/borderRadiusSolid02.html +/sdcard/android/layout_tests/fast/borders/outline-offset-min-assert.html +/sdcard/android/layout_tests/fast/borders/borderRadiusSolid04.html +/sdcard/android/layout_tests/fast/borders/border-radius-huge-assert.html +/sdcard/android/layout_tests/fast/borders/borderRadiusInset01.html +/sdcard/android/layout_tests/fast/borders/borderRadiusDotted01.html +/sdcard/android/layout_tests/fast/borders/borderRadiusOutset01.html +/sdcard/android/layout_tests/fast/borders/svg-as-border-image.html +/sdcard/android/layout_tests/fast/borders/borderRadiusDotted03.html +/sdcard/android/layout_tests/fast/borders/borderRadiusDashed02.html +/sdcard/android/layout_tests/fast/borders/borderRadiusRidge01.html +/sdcard/android/layout_tests/fast/borders/border-image-rotate-transform.html +/sdcard/android/layout_tests/fast/borders/inline-mask-overlay-image.html +/sdcard/android/layout_tests/fast/borders/borderRadiusGroove02.html +/sdcard/android/layout_tests/fast/borders/border-image-01.html /sdcard/android/layout_tests/fast/selectors/175a.html -/sdcard/android/layout_tests/fast/selectors/170d.html -/sdcard/android/layout_tests/fast/selectors/170c.html -/sdcard/android/layout_tests/fast/selectors/170b.html -/sdcard/android/layout_tests/fast/selectors/170a.html -/sdcard/android/layout_tests/fast/selectors/170.html -/sdcard/android/layout_tests/fast/selectors/169a.html -/sdcard/android/layout_tests/fast/selectors/169.html -/sdcard/android/layout_tests/fast/selectors/168a.html +/sdcard/android/layout_tests/fast/selectors/155c.html +/sdcard/android/layout_tests/fast/selectors/059.html +/sdcard/android/layout_tests/fast/selectors/066b.html /sdcard/android/layout_tests/fast/selectors/168.html -/sdcard/android/layout_tests/fast/selectors/167a.html -/sdcard/android/layout_tests/fast/selectors/167.html -/sdcard/android/layout_tests/fast/selectors/166a.html -/sdcard/android/layout_tests/fast/selectors/166.html -/sdcard/android/layout_tests/fast/selectors/160.html -/sdcard/android/layout_tests/fast/selectors/159.html -/sdcard/android/layout_tests/fast/selectors/158.html +/sdcard/android/layout_tests/fast/selectors/177a.html +/sdcard/android/layout_tests/fast/selectors/087b.html +/sdcard/android/layout_tests/fast/selectors/020.html +/sdcard/android/layout_tests/fast/selectors/012.html +/sdcard/android/layout_tests/fast/selectors/040.html +/sdcard/android/layout_tests/fast/selectors/004.html +/sdcard/android/layout_tests/fast/selectors/032.html +/sdcard/android/layout_tests/fast/selectors/060.html +/sdcard/android/layout_tests/fast/selectors/016.html +/sdcard/android/layout_tests/fast/selectors/044.html +/sdcard/android/layout_tests/fast/selectors/008.html +/sdcard/android/layout_tests/fast/selectors/072.html +/sdcard/android/layout_tests/fast/selectors/lang-inheritance.html : has expected results +/sdcard/android/layout_tests/fast/selectors/064.html +/sdcard/android/layout_tests/fast/selectors/056.html +/sdcard/android/layout_tests/fast/selectors/018b.html +/sdcard/android/layout_tests/fast/selectors/090b.html +/sdcard/android/layout_tests/fast/selectors/045c.html +/sdcard/android/layout_tests/fast/selectors/170d.html /sdcard/android/layout_tests/fast/selectors/157.html +/sdcard/android/layout_tests/fast/selectors/039b.html /sdcard/android/layout_tests/fast/selectors/156b.html +/sdcard/android/layout_tests/fast/selectors/175b.html /sdcard/android/layout_tests/fast/selectors/155d.html -/sdcard/android/layout_tests/fast/selectors/155c.html -/sdcard/android/layout_tests/fast/selectors/155b.html -/sdcard/android/layout_tests/fast/selectors/155a.html -/sdcard/android/layout_tests/fast/selectors/155.html +/sdcard/android/layout_tests/fast/selectors/167a.html +/sdcard/android/layout_tests/fast/selectors/169.html +/sdcard/android/layout_tests/fast/selectors/077b.html +/sdcard/android/layout_tests/fast/selectors/177b.html +/sdcard/android/layout_tests/fast/selectors/169a.html +/sdcard/android/layout_tests/fast/selectors/lang-vs-xml-lang.html : has expected results +/sdcard/android/layout_tests/fast/selectors/lang-inheritance2.html : has expected results +/sdcard/android/layout_tests/fast/selectors/001.html +/sdcard/android/layout_tests/fast/selectors/021.html +/sdcard/android/layout_tests/fast/selectors/unqualified-hover-quirks.html +/sdcard/android/layout_tests/fast/selectors/013.html +/sdcard/android/layout_tests/fast/selectors/041.html +/sdcard/android/layout_tests/fast/selectors/021b.html +/sdcard/android/layout_tests/fast/selectors/005.html +/sdcard/android/layout_tests/fast/selectors/061.html +/sdcard/android/layout_tests/fast/selectors/170.html +/sdcard/android/layout_tests/fast/selectors/017.html +/sdcard/android/layout_tests/fast/selectors/170a.html +/sdcard/android/layout_tests/fast/selectors/009.html +/sdcard/android/layout_tests/fast/selectors/045.html /sdcard/android/layout_tests/fast/selectors/154.html -/sdcard/android/layout_tests/fast/selectors/090b.html +/sdcard/android/layout_tests/fast/selectors/044b.html +/sdcard/android/layout_tests/fast/selectors/065.html +/sdcard/android/layout_tests/fast/selectors/155a.html +/sdcard/android/layout_tests/fast/selectors/166.html +/sdcard/android/layout_tests/fast/selectors/158.html +/sdcard/android/layout_tests/fast/selectors/077.html +/sdcard/android/layout_tests/fast/selectors/175c.html /sdcard/android/layout_tests/fast/selectors/089.html /sdcard/android/layout_tests/fast/selectors/088b.html -/sdcard/android/layout_tests/fast/selectors/087b.html -/sdcard/android/layout_tests/fast/selectors/083.html -/sdcard/android/layout_tests/fast/selectors/078b.html -/sdcard/android/layout_tests/fast/selectors/077b.html -/sdcard/android/layout_tests/fast/selectors/077.html -/sdcard/android/layout_tests/fast/selectors/072b.html -/sdcard/android/layout_tests/fast/selectors/072.html -/sdcard/android/layout_tests/fast/selectors/066b.html -/sdcard/android/layout_tests/fast/selectors/066.html -/sdcard/android/layout_tests/fast/selectors/065.html -/sdcard/android/layout_tests/fast/selectors/064.html -/sdcard/android/layout_tests/fast/selectors/063.html +/sdcard/android/layout_tests/fast/selectors/nondeterministic-combinators.html +/sdcard/android/layout_tests/fast/selectors/unqualified-hover-strict.html +/sdcard/android/layout_tests/fast/selectors/010.html +/sdcard/android/layout_tests/fast/selectors/002.html +/sdcard/android/layout_tests/fast/selectors/014.html +/sdcard/android/layout_tests/fast/selectors/042.html +/sdcard/android/layout_tests/fast/selectors/006.html +/sdcard/android/layout_tests/fast/selectors/034.html /sdcard/android/layout_tests/fast/selectors/062.html -/sdcard/android/layout_tests/fast/selectors/061.html -/sdcard/android/layout_tests/fast/selectors/060.html -/sdcard/android/layout_tests/fast/selectors/059.html -/sdcard/android/layout_tests/fast/selectors/058.html -/sdcard/android/layout_tests/fast/selectors/056.html +/sdcard/android/layout_tests/fast/selectors/007a.html /sdcard/android/layout_tests/fast/selectors/054.html +/sdcard/android/layout_tests/fast/selectors/018.html /sdcard/android/layout_tests/fast/selectors/046.html -/sdcard/android/layout_tests/fast/selectors/045c.html -/sdcard/android/layout_tests/fast/selectors/045b.html -/sdcard/android/layout_tests/fast/selectors/045.html -/sdcard/android/layout_tests/fast/selectors/044d.html +/sdcard/android/layout_tests/fast/selectors/170b.html +/sdcard/android/layout_tests/fast/selectors/072b.html /sdcard/android/layout_tests/fast/selectors/044c.html -/sdcard/android/layout_tests/fast/selectors/044b.html -/sdcard/android/layout_tests/fast/selectors/044.html -/sdcard/android/layout_tests/fast/selectors/043b.html -/sdcard/android/layout_tests/fast/selectors/043.html -/sdcard/android/layout_tests/fast/selectors/042.html -/sdcard/android/layout_tests/fast/selectors/041.html -/sdcard/android/layout_tests/fast/selectors/040.html -/sdcard/android/layout_tests/fast/selectors/039b.html -/sdcard/android/layout_tests/fast/selectors/039.html /sdcard/android/layout_tests/fast/selectors/038.html -/sdcard/android/layout_tests/fast/selectors/034.html -/sdcard/android/layout_tests/fast/selectors/032.html -/sdcard/android/layout_tests/fast/selectors/027.html -/sdcard/android/layout_tests/fast/selectors/021b.html -/sdcard/android/layout_tests/fast/selectors/021.html -/sdcard/android/layout_tests/fast/selectors/020.html -/sdcard/android/layout_tests/fast/selectors/019.html -/sdcard/android/layout_tests/fast/selectors/018b.html -/sdcard/android/layout_tests/fast/selectors/018.html -/sdcard/android/layout_tests/fast/selectors/017.html -/sdcard/android/layout_tests/fast/selectors/016.html -/sdcard/android/layout_tests/fast/selectors/015.html -/sdcard/android/layout_tests/fast/selectors/014.html -/sdcard/android/layout_tests/fast/selectors/013.html -/sdcard/android/layout_tests/fast/selectors/012.html +/sdcard/android/layout_tests/fast/selectors/155.html +/sdcard/android/layout_tests/fast/selectors/066.html +/sdcard/android/layout_tests/fast/selectors/058.html +/sdcard/android/layout_tests/fast/selectors/155b.html +/sdcard/android/layout_tests/fast/selectors/166a.html +/sdcard/android/layout_tests/fast/selectors/167.html +/sdcard/android/layout_tests/fast/selectors/159.html +/sdcard/android/layout_tests/fast/selectors/168a.html +/sdcard/android/layout_tests/fast/selectors/078b.html /sdcard/android/layout_tests/fast/selectors/011.html -/sdcard/android/layout_tests/fast/selectors/010.html -/sdcard/android/layout_tests/fast/selectors/009.html -/sdcard/android/layout_tests/fast/selectors/008.html -/sdcard/android/layout_tests/fast/selectors/007b.html -/sdcard/android/layout_tests/fast/selectors/007a.html -/sdcard/android/layout_tests/fast/selectors/006.html -/sdcard/android/layout_tests/fast/selectors/005.html -/sdcard/android/layout_tests/fast/selectors/004.html /sdcard/android/layout_tests/fast/selectors/003.html -/sdcard/android/layout_tests/fast/selectors/002.html -/sdcard/android/layout_tests/fast/selectors/001.html -/sdcard/android/layout_tests/fast/runin/001.html -/sdcard/android/layout_tests/fast/replaced/width100percent-textfield.html -/sdcard/android/layout_tests/fast/replaced/width100percent-textarea.html -/sdcard/android/layout_tests/fast/replaced/width100percent-searchfield.html -/sdcard/android/layout_tests/fast/replaced/width100percent-radio.html -/sdcard/android/layout_tests/fast/replaced/width100percent-menulist.html -/sdcard/android/layout_tests/fast/replaced/width100percent-image.html -/sdcard/android/layout_tests/fast/replaced/width100percent-checkbox.html -/sdcard/android/layout_tests/fast/replaced/width100percent-button.html -/sdcard/android/layout_tests/fast/replaced/three-selects-break.html -/sdcard/android/layout_tests/fast/replaced/selection-rect.html -/sdcard/android/layout_tests/fast/replaced/selection-rect-in-table-cell.html -/sdcard/android/layout_tests/fast/replaced/replaced-child-of-absolute-with-auto-height.html -/sdcard/android/layout_tests/fast/replaced/replaced-breaking.html -/sdcard/android/layout_tests/fast/replaced/replaced-breaking-mixture.html -/sdcard/android/layout_tests/fast/replaced/percent-height-in-anonymous-block.html -/sdcard/android/layout_tests/fast/replaced/percent-height-in-anonymous-block-widget.html -/sdcard/android/layout_tests/fast/replaced/pdf-as-image.html -/sdcard/android/layout_tests/fast/replaced/object-align-hspace-vspace.html -/sdcard/android/layout_tests/fast/replaced/minwidth-pxs.html -/sdcard/android/layout_tests/fast/replaced/minwidth-percent.html -/sdcard/android/layout_tests/fast/replaced/minheight-pxs.html -/sdcard/android/layout_tests/fast/replaced/minheight-percent.html -/sdcard/android/layout_tests/fast/replaced/maxwidth-pxs.html -/sdcard/android/layout_tests/fast/replaced/maxwidth-percent.html -/sdcard/android/layout_tests/fast/replaced/maxheight-pxs.html -/sdcard/android/layout_tests/fast/replaced/maxheight-percent.html -/sdcard/android/layout_tests/fast/replaced/max-width-percent.html -/sdcard/android/layout_tests/fast/replaced/inline-box-wrapper-handover.html -/sdcard/android/layout_tests/fast/replaced/image-tag.html -/sdcard/android/layout_tests/fast/replaced/image-solid-color-with-alpha.html -/sdcard/android/layout_tests/fast/replaced/image-sizing.html -/sdcard/android/layout_tests/fast/replaced/image-resize-width.html -/sdcard/android/layout_tests/fast/replaced/image-onload.html -/sdcard/android/layout_tests/fast/replaced/applet-rendering-java-disabled.html -/sdcard/android/layout_tests/fast/replaced/applet-disabled-positioned.html -/sdcard/android/layout_tests/fast/replaced/absolute-position-with-auto-width-and-left-and-right.html -/sdcard/android/layout_tests/fast/replaced/absolute-position-with-auto-height-and-top-and-bottom.html -/sdcard/android/layout_tests/fast/replaced/absolute-position-percentage-width.html -/sdcard/android/layout_tests/fast/replaced/absolute-position-percentage-height.html -/sdcard/android/layout_tests/fast/replaced/absolute-image-sizing.html -/sdcard/android/layout_tests/fast/replaced/008.html -/sdcard/android/layout_tests/fast/replaced/007.html -/sdcard/android/layout_tests/fast/replaced/006.html -/sdcard/android/layout_tests/fast/replaced/005.html -/sdcard/android/layout_tests/fast/replaced/004.html -/sdcard/android/layout_tests/fast/replaced/003.html -/sdcard/android/layout_tests/fast/replaced/002.html -/sdcard/android/layout_tests/fast/replaced/001.html -/sdcard/android/layout_tests/fast/repaint/transform-translate.html -/sdcard/android/layout_tests/fast/repaint/text-shadow.html -/sdcard/android/layout_tests/fast/repaint/text-shadow-horizontal.html -/sdcard/android/layout_tests/fast/repaint/text-selection-rect-in-overflow.html -/sdcard/android/layout_tests/fast/repaint/text-selection-rect-in-overflow-2.html -/sdcard/android/layout_tests/fast/repaint/table-two-pass-layout-overpaint.html -/sdcard/android/layout_tests/fast/repaint/table-section-repaint.html -/sdcard/android/layout_tests/fast/repaint/table-section-overflow.html -/sdcard/android/layout_tests/fast/repaint/table-row.html -/sdcard/android/layout_tests/fast/repaint/table-outer-border.html -/sdcard/android/layout_tests/fast/repaint/table-extra-bottom-grow.html -/sdcard/android/layout_tests/fast/repaint/table-collapsed-border.html -/sdcard/android/layout_tests/fast/repaint/table-col-background.html -/sdcard/android/layout_tests/fast/repaint/table-cell-vertical-overflow.html -/sdcard/android/layout_tests/fast/repaint/table-cell-move.html -/sdcard/android/layout_tests/fast/repaint/table-cell-collapsed-border.html -/sdcard/android/layout_tests/fast/repaint/subtree-root-skipped.html -/sdcard/android/layout_tests/fast/repaint/subtree-root-clip.html -/sdcard/android/layout_tests/fast/repaint/subtree-root-clip-3.html -/sdcard/android/layout_tests/fast/repaint/subtree-root-clip-2.html -/sdcard/android/layout_tests/fast/repaint/static-to-positioned.html -/sdcard/android/layout_tests/fast/repaint/shadow-multiple-vertical.html -/sdcard/android/layout_tests/fast/repaint/shadow-multiple-strict-vertical.html -/sdcard/android/layout_tests/fast/repaint/shadow-multiple-strict-horizontal.html -/sdcard/android/layout_tests/fast/repaint/shadow-multiple-horizontal.html -/sdcard/android/layout_tests/fast/repaint/selection-gap-overflow-scroll.html -/sdcard/android/layout_tests/fast/repaint/selection-after-remove.html -/sdcard/android/layout_tests/fast/repaint/selection-after-delete.html -/sdcard/android/layout_tests/fast/repaint/repaint-resized-overflow.html -/sdcard/android/layout_tests/fast/repaint/renderer-destruction-by-invalidateSelection-crash.html -/sdcard/android/layout_tests/fast/repaint/overflow-scroll-delete.html -/sdcard/android/layout_tests/fast/repaint/overflow-outline-repaint.html -/sdcard/android/layout_tests/fast/repaint/overflow-into-content.html -/sdcard/android/layout_tests/fast/repaint/overflow-delete-line.html -/sdcard/android/layout_tests/fast/repaint/overflow-clip-subtree-layout.html -/sdcard/android/layout_tests/fast/repaint/outline-shrinking.html -/sdcard/android/layout_tests/fast/repaint/outline-repaint-glitch.html -/sdcard/android/layout_tests/fast/repaint/outline-inset.html -/sdcard/android/layout_tests/fast/repaint/make-children-non-inline.html -/sdcard/android/layout_tests/fast/repaint/list-marker.html -/sdcard/android/layout_tests/fast/repaint/list-marker-2.html -/sdcard/android/layout_tests/fast/repaint/lines-with-layout-delta.html -/sdcard/android/layout_tests/fast/repaint/line-overflow.html -/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-9.html -/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-8.html -/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-7.html -/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-6.html -/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-5.html -/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-4.html -/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-3.html -/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-2.html -/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-10.html -/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-1.html -/sdcard/android/layout_tests/fast/repaint/layout-state-relative.html -/sdcard/android/layout_tests/fast/repaint/layout-state-only-positioned.html -/sdcard/android/layout_tests/fast/repaint/layer-visibility.html -/sdcard/android/layout_tests/fast/repaint/layer-outline.html -/sdcard/android/layout_tests/fast/repaint/layer-outline-horizontal.html -/sdcard/android/layout_tests/fast/repaint/layer-hide-when-needs-layout.html -/sdcard/android/layout_tests/fast/repaint/layer-full-repaint.html -/sdcard/android/layout_tests/fast/repaint/layer-child-outline.html -/sdcard/android/layout_tests/fast/repaint/invisible-objects.html -/sdcard/android/layout_tests/fast/repaint/intermediate-layout-position.html -/sdcard/android/layout_tests/fast/repaint/intermediate-layout-position-clip.html -/sdcard/android/layout_tests/fast/repaint/inline-outline-repaint.html -/sdcard/android/layout_tests/fast/repaint/inline-block-overflow.html -/sdcard/android/layout_tests/fast/repaint/focus-ring.html -/sdcard/android/layout_tests/fast/repaint/focus-layers.html -/sdcard/android/layout_tests/fast/repaint/float-overflow.html -/sdcard/android/layout_tests/fast/repaint/float-overflow-right.html -/sdcard/android/layout_tests/fast/repaint/float-move-during-layout.html -/sdcard/android/layout_tests/fast/repaint/flexible-box-overflow.html -/sdcard/android/layout_tests/fast/repaint/flexible-box-overflow-horizontal.html -/sdcard/android/layout_tests/fast/repaint/fixed.html -/sdcard/android/layout_tests/fast/repaint/erase-overflow.html -/sdcard/android/layout_tests/fast/repaint/delete-into-nested-block.html -/sdcard/android/layout_tests/fast/repaint/control-clip.html -/sdcard/android/layout_tests/fast/repaint/continuation-after-outline.html -/sdcard/android/layout_tests/fast/repaint/content-into-overflow.html -/sdcard/android/layout_tests/fast/repaint/containing-block-position-change.html -/sdcard/android/layout_tests/fast/repaint/clipped-relative.html -/sdcard/android/layout_tests/fast/repaint/clip-with-layout-delta.html -/sdcard/android/layout_tests/fast/repaint/caret-outside-block.html -/sdcard/android/layout_tests/fast/repaint/button-spurious-layout-hint.html -/sdcard/android/layout_tests/fast/repaint/bugzilla-7235.html -/sdcard/android/layout_tests/fast/repaint/bugzilla-6473.html -/sdcard/android/layout_tests/fast/repaint/bugzilla-6388.html -/sdcard/android/layout_tests/fast/repaint/bugzilla-6278.html -/sdcard/android/layout_tests/fast/repaint/bugzilla-5699.html -/sdcard/android/layout_tests/fast/repaint/bugzilla-3509.html -/sdcard/android/layout_tests/fast/repaint/box-shadow-v.html -/sdcard/android/layout_tests/fast/repaint/box-shadow-h.html -/sdcard/android/layout_tests/fast/repaint/box-shadow-dynamic.html -/sdcard/android/layout_tests/fast/repaint/border-repaint-glitch.html -/sdcard/android/layout_tests/fast/repaint/border-radius-repaint.html -/sdcard/android/layout_tests/fast/repaint/border-fit-lines.html -/sdcard/android/layout_tests/fast/repaint/body-background-image.html -/sdcard/android/layout_tests/fast/repaint/backgroundSizeRepaint.html -/sdcard/android/layout_tests/fast/repaint/4776765.html -/sdcard/android/layout_tests/fast/repaint/4774354.html -/sdcard/android/layout_tests/fast/reflections/table-cell.html -/sdcard/android/layout_tests/fast/reflections/reflection-nesting.html -/sdcard/android/layout_tests/fast/reflections/reflection-direction.html -/sdcard/android/layout_tests/fast/reflections/inline-crash.html -/sdcard/android/layout_tests/fast/parser/title-error-test.html -/sdcard/android/layout_tests/fast/parser/style-script-head-test.html -/sdcard/android/layout_tests/fast/parser/parseCommentsInTitles.html -/sdcard/android/layout_tests/fast/parser/open-comment-in-textarea.html -/sdcard/android/layout_tests/fast/parser/open-comment-in-style.html -/sdcard/android/layout_tests/fast/parser/fonts.html -/sdcard/android/layout_tests/fast/parser/external-entities-in-xslt.xml -/sdcard/android/layout_tests/fast/parser/entity-comment-in-textarea.html -/sdcard/android/layout_tests/fast/parser/entity-comment-in-style.html -/sdcard/android/layout_tests/fast/parser/document-write-option.html -/sdcard/android/layout_tests/fast/parser/comments.html -/sdcard/android/layout_tests/fast/parser/comment-in-style.html -/sdcard/android/layout_tests/fast/parser/comment-in-script.html -/sdcard/android/layout_tests/fast/parser/broken-comments-vs-parsing-mode.html -/sdcard/android/layout_tests/fast/parser/bad-xml-slash.html -/sdcard/android/layout_tests/fast/parser/001.html +/sdcard/android/layout_tests/fast/selectors/015.html +/sdcard/android/layout_tests/fast/selectors/043.html +/sdcard/android/layout_tests/fast/selectors/160.html +/sdcard/android/layout_tests/fast/selectors/063.html +/sdcard/android/layout_tests/fast/selectors/043b.html +/sdcard/android/layout_tests/fast/selectors/007b.html +/sdcard/android/layout_tests/fast/selectors/027.html +/sdcard/android/layout_tests/fast/selectors/019.html +/sdcard/android/layout_tests/fast/selectors/083.html +/sdcard/android/layout_tests/fast/selectors/045b.html +/sdcard/android/layout_tests/fast/selectors/170c.html +/sdcard/android/layout_tests/fast/selectors/044d.html +/sdcard/android/layout_tests/fast/selectors/039.html +/sdcard/android/layout_tests/fast/overflow/overflow-focus-ring.html +/sdcard/android/layout_tests/fast/overflow/overflow-x-y.html +/sdcard/android/layout_tests/fast/overflow/overflow-text-hit-testing.html /sdcard/android/layout_tests/fast/overflow/unreachable-overflow-rtl-bug.html -/sdcard/android/layout_tests/fast/overflow/unreachable-content-test.html -/sdcard/android/layout_tests/fast/overflow/table-overflow-float.html +/sdcard/android/layout_tests/fast/overflow/overflow-auto-position-absolute.html /sdcard/android/layout_tests/fast/overflow/scrollRevealButton.html +/sdcard/android/layout_tests/fast/overflow/overflow-rtl-inline-scrollbar.html +/sdcard/android/layout_tests/fast/overflow/002.html +/sdcard/android/layout_tests/fast/overflow/overflow-rtl.html +/sdcard/android/layout_tests/fast/overflow/004.html +/sdcard/android/layout_tests/fast/overflow/006.html /sdcard/android/layout_tests/fast/overflow/scrollbar-position-update.html +/sdcard/android/layout_tests/fast/overflow/008.html /sdcard/android/layout_tests/fast/overflow/scroll-nested-positioned-layer-in-overflow.html +/sdcard/android/layout_tests/fast/overflow/image-selection-highlight.html +/sdcard/android/layout_tests/fast/overflow/childFocusRingClip.html +/sdcard/android/layout_tests/fast/overflow/dynamic-hidden.html /sdcard/android/layout_tests/fast/overflow/position-relative.html +/sdcard/android/layout_tests/fast/overflow/clip-rects-fixed-ancestor.html /sdcard/android/layout_tests/fast/overflow/overflow_hidden.html -/sdcard/android/layout_tests/fast/overflow/overflow-x-y.html -/sdcard/android/layout_tests/fast/overflow/overflow-text-hit-testing.html -/sdcard/android/layout_tests/fast/overflow/overflow-rtl.html -/sdcard/android/layout_tests/fast/overflow/overflow-rtl-inline-scrollbar.html -/sdcard/android/layout_tests/fast/overflow/overflow-focus-ring.html -/sdcard/android/layout_tests/fast/overflow/overflow-auto-table.html -/sdcard/android/layout_tests/fast/overflow/overflow-auto-position-absolute.html /sdcard/android/layout_tests/fast/overflow/infiniteRecursionGuard.html -/sdcard/android/layout_tests/fast/overflow/infiniteRecursion.html -/sdcard/android/layout_tests/fast/overflow/image-selection-highlight.html -/sdcard/android/layout_tests/fast/overflow/hit-test-overflow-controls.html -/sdcard/android/layout_tests/fast/overflow/hidden-scrollbar-resize.html /sdcard/android/layout_tests/fast/overflow/float-in-relpositioned.html -/sdcard/android/layout_tests/fast/overflow/dynamic-hidden.html -/sdcard/android/layout_tests/fast/overflow/clip-rects-fixed-ancestor.html -/sdcard/android/layout_tests/fast/overflow/childFocusRingClip.html -/sdcard/android/layout_tests/fast/overflow/008.html -/sdcard/android/layout_tests/fast/overflow/007.html -/sdcard/android/layout_tests/fast/overflow/006.html -/sdcard/android/layout_tests/fast/overflow/005.html -/sdcard/android/layout_tests/fast/overflow/004.html +/sdcard/android/layout_tests/fast/overflow/table-overflow-float.html +/sdcard/android/layout_tests/fast/overflow/unreachable-content-test.html /sdcard/android/layout_tests/fast/overflow/003.xml -/sdcard/android/layout_tests/fast/overflow/002.html +/sdcard/android/layout_tests/fast/overflow/overflow-auto-table.html +/sdcard/android/layout_tests/fast/overflow/infiniteRecursion.html /sdcard/android/layout_tests/fast/overflow/001.html -/sdcard/android/layout_tests/fast/multicol/zeroColumnCount.html -/sdcard/android/layout_tests/fast/multicol/negativeColumnWidth.html -/sdcard/android/layout_tests/fast/multicol/float-multicol.html -/sdcard/android/layout_tests/fast/multicol/float-avoidance.html -/sdcard/android/layout_tests/fast/multicol/columns-shorthand-parsing.html -/sdcard/android/layout_tests/fast/multicol/column-rules.html -/sdcard/android/layout_tests/fast/media/viewport-media-query.html -/sdcard/android/layout_tests/fast/media/mq-width-absolute-04.html -/sdcard/android/layout_tests/fast/media/mq-width-absolute-03.html -/sdcard/android/layout_tests/fast/media/mq-width-absolute-02.html -/sdcard/android/layout_tests/fast/media/mq-width-absolute-01.html -/sdcard/android/layout_tests/fast/media/mq-valueless.html -/sdcard/android/layout_tests/fast/media/mq-simple-query-05.html -/sdcard/android/layout_tests/fast/media/mq-simple-query-04.html -/sdcard/android/layout_tests/fast/media/mq-simple-query-03.html -/sdcard/android/layout_tests/fast/media/mq-simple-query-02.html -/sdcard/android/layout_tests/fast/media/mq-simple-query-01.html -/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-05.html -/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-04.html -/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-03.html -/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-02.html -/sdcard/android/layout_tests/fast/media/mq-simple-neg-query-01.html -/sdcard/android/layout_tests/fast/media/mq-relative-constraints-09.html -/sdcard/android/layout_tests/fast/media/mq-relative-constraints-08.html -/sdcard/android/layout_tests/fast/media/mq-relative-constraints-07.html -/sdcard/android/layout_tests/fast/media/mq-relative-constraints-06.html -/sdcard/android/layout_tests/fast/media/mq-relative-constraints-05.html -/sdcard/android/layout_tests/fast/media/mq-relative-constraints-04.html -/sdcard/android/layout_tests/fast/media/mq-relative-constraints-03.html -/sdcard/android/layout_tests/fast/media/mq-relative-constraints-02.html -/sdcard/android/layout_tests/fast/media/mq-pixel-ratio.html -/sdcard/android/layout_tests/fast/media/mq-min-pixel-ratio.html -/sdcard/android/layout_tests/fast/media/mq-min-constraint.html -/sdcard/android/layout_tests/fast/media/mq-max-pixel-ratio.html -/sdcard/android/layout_tests/fast/media/mq-js-stylesheet-media-04.html -/sdcard/android/layout_tests/fast/media/mq-js-stylesheet-media-03.html -/sdcard/android/layout_tests/fast/media/mq-js-stylesheet-media-02.html -/sdcard/android/layout_tests/fast/media/mq-js-stylesheet-media-01.html -/sdcard/android/layout_tests/fast/media/mq-js-media-forward-syntax.html -/sdcard/android/layout_tests/fast/media/mq-js-media-except-03.html -/sdcard/android/layout_tests/fast/media/mq-js-media-except-02.html -/sdcard/android/layout_tests/fast/media/mq-js-media-except-01.html -/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-05.html -/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-04.html -/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-03.html -/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-02.html -/sdcard/android/layout_tests/fast/media/mq-invalid-syntax-01.html -/sdcard/android/layout_tests/fast/media/mq-invalid-media-feature-04.html -/sdcard/android/layout_tests/fast/media/mq-invalid-media-feature-03.html -/sdcard/android/layout_tests/fast/media/mq-invalid-media-feature-02.html -/sdcard/android/layout_tests/fast/media/mq-invalid-media-feature-01.html -/sdcard/android/layout_tests/fast/media/mq-grid-02.html -/sdcard/android/layout_tests/fast/media/mq-grid-01.html -/sdcard/android/layout_tests/fast/media/mq-compound-query-05.html -/sdcard/android/layout_tests/fast/media/mq-compound-query-04.html -/sdcard/android/layout_tests/fast/media/mq-compound-query-03.html -/sdcard/android/layout_tests/fast/media/mq-compound-query-02.html -/sdcard/android/layout_tests/fast/media/mq-compound-query-01.html -/sdcard/android/layout_tests/fast/media/monochrome.html -/sdcard/android/layout_tests/fast/media/media-type-syntax-02.html -/sdcard/android/layout_tests/fast/media/media-type-syntax-01.html -/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-06.html -/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-05.html -/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-04.html -/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-03.html -/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-02.html -/sdcard/android/layout_tests/fast/media/media-descriptor-syntax-01.html -/sdcard/android/layout_tests/fast/media/implicit-media-all.html -/sdcard/android/layout_tests/fast/loader/text-document-wrapping.html -/sdcard/android/layout_tests/fast/loader/start-load-in-unload.html -/sdcard/android/layout_tests/fast/lists/w3-list-styles.html -/sdcard/android/layout_tests/fast/lists/scrolled-marker-paint.html -/sdcard/android/layout_tests/fast/lists/ordered-list-with-no-ol-tag.html -/sdcard/android/layout_tests/fast/lists/olstart.html -/sdcard/android/layout_tests/fast/lists/ol-start-dynamic.html -/sdcard/android/layout_tests/fast/lists/ol-display-types.html -/sdcard/android/layout_tests/fast/lists/numeric-markers-outside-list.html -/sdcard/android/layout_tests/fast/lists/markers-in-selection.html -/sdcard/android/layout_tests/fast/lists/marker-image-error.html -/sdcard/android/layout_tests/fast/lists/marker-before-empty-inline.html -/sdcard/android/layout_tests/fast/lists/list-style-type-dynamic-change.html -/sdcard/android/layout_tests/fast/lists/list-style-none-crash.html -/sdcard/android/layout_tests/fast/lists/list-item-line-height.html -/sdcard/android/layout_tests/fast/lists/li-values.html -/sdcard/android/layout_tests/fast/lists/li-style-alpha-huge-value-crash.html -/sdcard/android/layout_tests/fast/lists/li-br.html -/sdcard/android/layout_tests/fast/lists/item-not-in-list-line-wrapping.html -/sdcard/android/layout_tests/fast/lists/inlineBoxWrapperNullCheck.html -/sdcard/android/layout_tests/fast/lists/dynamic-marker-crash.html -/sdcard/android/layout_tests/fast/lists/drag-into-marker.html -/sdcard/android/layout_tests/fast/lists/decimal-leading-zero.html -/sdcard/android/layout_tests/fast/lists/big-list-marker.html -/sdcard/android/layout_tests/fast/lists/alpha-list-wrap.html -/sdcard/android/layout_tests/fast/lists/009.html -/sdcard/android/layout_tests/fast/lists/008.html -/sdcard/android/layout_tests/fast/lists/007.html -/sdcard/android/layout_tests/fast/lists/006.html -/sdcard/android/layout_tests/fast/lists/005.html -/sdcard/android/layout_tests/fast/lists/004.html -/sdcard/android/layout_tests/fast/lists/003.html -/sdcard/android/layout_tests/fast/lists/002.html -/sdcard/android/layout_tests/fast/lists/001.html -/sdcard/android/layout_tests/fast/layers/zindex-ridonkulous.html -/sdcard/android/layout_tests/fast/layers/zindex-inherit.html -/sdcard/android/layout_tests/fast/layers/scroll-rect-to-visible.html -/sdcard/android/layout_tests/fast/layers/remove-layer-with-nested-stacking.html -/sdcard/android/layout_tests/fast/layers/positioned-inside-root-with-margins.html -/sdcard/android/layout_tests/fast/layers/overflow-scroll-auto-switch.html -/sdcard/android/layout_tests/fast/layers/opacity-stacking.html -/sdcard/android/layout_tests/fast/layers/opacity-outline.html -/sdcard/android/layout_tests/fast/layers/layer-visibility.html -/sdcard/android/layout_tests/fast/layers/layer-visibility-sublayer.html -/sdcard/android/layout_tests/fast/layers/layer-content-visibility-change.html -/sdcard/android/layout_tests/fast/layers/add-layer-with-nested-stacking.html -/sdcard/android/layout_tests/fast/js/missing-style-end-tag-js.html -/sdcard/android/layout_tests/fast/invalid/td-inside-object.html -/sdcard/android/layout_tests/fast/invalid/table-residual-style-crash.html -/sdcard/android/layout_tests/fast/invalid/table-inside-stray-table-content.html -/sdcard/android/layout_tests/fast/invalid/residual-style.html -/sdcard/android/layout_tests/fast/invalid/nestedh3s.html -/sdcard/android/layout_tests/fast/invalid/missing-font-end-tag.html -/sdcard/android/layout_tests/fast/invalid/missing-dt-end-tag.html -/sdcard/android/layout_tests/fast/invalid/missing-dl-end-tag.html -/sdcard/android/layout_tests/fast/invalid/missing-address-end-tag.html -/sdcard/android/layout_tests/fast/invalid/junk-data.xml -/sdcard/android/layout_tests/fast/invalid/021.html -/sdcard/android/layout_tests/fast/invalid/020.xml -/sdcard/android/layout_tests/fast/invalid/019.html -/sdcard/android/layout_tests/fast/invalid/018.html -/sdcard/android/layout_tests/fast/invalid/017.html -/sdcard/android/layout_tests/fast/invalid/016.html -/sdcard/android/layout_tests/fast/invalid/015.html -/sdcard/android/layout_tests/fast/invalid/014.html -/sdcard/android/layout_tests/fast/invalid/013.html -/sdcard/android/layout_tests/fast/invalid/012.html -/sdcard/android/layout_tests/fast/invalid/011.html -/sdcard/android/layout_tests/fast/invalid/010.html -/sdcard/android/layout_tests/fast/invalid/009.html -/sdcard/android/layout_tests/fast/invalid/008.html -/sdcard/android/layout_tests/fast/invalid/007.html -/sdcard/android/layout_tests/fast/invalid/006.html -/sdcard/android/layout_tests/fast/invalid/005.html -/sdcard/android/layout_tests/fast/invalid/004.html -/sdcard/android/layout_tests/fast/invalid/003.html -/sdcard/android/layout_tests/fast/invalid/002.html -/sdcard/android/layout_tests/fast/invalid/001.html -/sdcard/android/layout_tests/fast/inspector/style.html -/sdcard/android/layout_tests/fast/inspector/matchedrules.html -/sdcard/android/layout_tests/fast/innerHTML/006.html -/sdcard/android/layout_tests/fast/innerHTML/003.html -/sdcard/android/layout_tests/fast/innerHTML/002.html -/sdcard/android/layout_tests/fast/innerHTML/001.html -/sdcard/android/layout_tests/fast/inline-block/tricky-baseline.html -/sdcard/android/layout_tests/fast/inline-block/overflow-clip.html -/sdcard/android/layout_tests/fast/inline-block/inline-block-vertical-align.html -/sdcard/android/layout_tests/fast/inline-block/contenteditable-baseline.html -/sdcard/android/layout_tests/fast/inline-block/14498-positionForCoordinates.html -/sdcard/android/layout_tests/fast/inline-block/006.html -/sdcard/android/layout_tests/fast/inline-block/005.html -/sdcard/android/layout_tests/fast/inline-block/004.html -/sdcard/android/layout_tests/fast/inline-block/003.html -/sdcard/android/layout_tests/fast/inline-block/002.html -/sdcard/android/layout_tests/fast/inline-block/001.html -/sdcard/android/layout_tests/fast/inline/styledEmptyInlinesWithBRs.html -/sdcard/android/layout_tests/fast/inline/positionedLifetime.html -/sdcard/android/layout_tests/fast/inline/percentage-margins.html -/sdcard/android/layout_tests/fast/inline/outline-continuations.html -/sdcard/android/layout_tests/fast/inline/inline-text-quirk-bpm.html -/sdcard/android/layout_tests/fast/inline/inline-padding-disables-text-quirk.html -/sdcard/android/layout_tests/fast/inline/inline-borders-with-bidi-override.html -/sdcard/android/layout_tests/fast/inline/emptyInlinesWithinLists.html -/sdcard/android/layout_tests/fast/inline/drawStyledEmptyInlinesWithWS.html -/sdcard/android/layout_tests/fast/inline/drawStyledEmptyInlines.html -/sdcard/android/layout_tests/fast/inline/dirtyLinesForInline.html -/sdcard/android/layout_tests/fast/inline/continuation-outlines.html -/sdcard/android/layout_tests/fast/inline/continuation-outlines-with-layers.html -/sdcard/android/layout_tests/fast/inline/002.html -/sdcard/android/layout_tests/fast/inline/001.html +/sdcard/android/layout_tests/fast/overflow/hit-test-overflow-controls.html +/sdcard/android/layout_tests/fast/overflow/005.html +/sdcard/android/layout_tests/fast/overflow/007.html +/sdcard/android/layout_tests/fast/overflow/hidden-scrollbar-resize.html +/sdcard/android/layout_tests/fast/events/autoscroll.html +/sdcard/android/layout_tests/fast/events/5056619.html +/sdcard/android/layout_tests/fast/events/attempt-scroll-with-no-scrollbars.html : has expected results +/sdcard/android/layout_tests/fast/events/updateLayoutForHitTest.html +/sdcard/android/layout_tests/fast/events/label-focus.html +/sdcard/android/layout_tests/fast/events/context-onmousedown-event.html : has expected results +/sdcard/android/layout_tests/fast/events/onsubmit-bubbling.html : has expected results +/sdcard/android/layout_tests/fast/events/onloadFrameCrash.html +/sdcard/android/layout_tests/fast/events/event-listener-on-link.html +/sdcard/android/layout_tests/fast/events/keydown-1.html +/sdcard/android/layout_tests/fast/events/onload-re-entry.html +/sdcard/android/layout_tests/fast/events/standalone-image-drag-to-editable.html +/sdcard/android/layout_tests/fast/events/pointer-events.html : has expected results +/sdcard/android/layout_tests/fast/events/pointer-events-2.html : has expected results +/sdcard/android/layout_tests/fast/events/nested-window-event.html : has expected results +/sdcard/android/layout_tests/fast/events/focusingUnloadedFrame.html +/sdcard/android/layout_tests/fast/events/event-sender-mouse-moved.html +/sdcard/android/layout_tests/fast/events/mouseout-dead-node.html +/sdcard/android/layout_tests/fast/events/reveal-link-when-focused.html +/sdcard/android/layout_tests/fast/html/keygen.html +/sdcard/android/layout_tests/fast/html/link-rel-stylesheet.html +/sdcard/android/layout_tests/fast/html/listing.html +/sdcard/android/layout_tests/fast/html/marquee-scroll.html /sdcard/android/layout_tests/fast/images/svg-as-tiled-background.html -/sdcard/android/layout_tests/fast/images/svg-as-relative-image.html -/sdcard/android/layout_tests/fast/images/svg-as-image.html /sdcard/android/layout_tests/fast/images/svg-as-background.html -/sdcard/android/layout_tests/fast/images/pdf-as-tiled-background.html -/sdcard/android/layout_tests/fast/images/pdf-as-image.html +/sdcard/android/layout_tests/fast/images/svg-as-image.html /sdcard/android/layout_tests/fast/images/pdf-as-image-landscape.html -/sdcard/android/layout_tests/fast/images/pdf-as-background.html +/sdcard/android/layout_tests/fast/images/pdf-as-tiled-background.html /sdcard/android/layout_tests/fast/images/object-image.html +/sdcard/android/layout_tests/fast/images/pdf-as-background.html +/sdcard/android/layout_tests/fast/images/svg-as-relative-image.html +/sdcard/android/layout_tests/fast/images/imagemap-case.html +/sdcard/android/layout_tests/fast/images/pdf-as-image.html /sdcard/android/layout_tests/fast/images/image-map-anchor-children.html -/sdcard/android/layout_tests/fast/images/image-in-map.html -/sdcard/android/layout_tests/fast/images/favicon-as-image.html /sdcard/android/layout_tests/fast/images/embed-image.html +/sdcard/android/layout_tests/fast/images/animated-svg-as-image.html +/sdcard/android/layout_tests/fast/images/image-in-map.html /sdcard/android/layout_tests/fast/images/animated-gif-with-offsets.html -/sdcard/android/layout_tests/fast/html/marquee-scroll.html -/sdcard/android/layout_tests/fast/html/listing.html -/sdcard/android/layout_tests/fast/html/link-rel-stylesheet.html -/sdcard/android/layout_tests/fast/html/keygen.html -/sdcard/android/layout_tests/fast/history/history_reload.html -/sdcard/android/layout_tests/fast/history/clicked-link-is-visited.html -/sdcard/android/layout_tests/fast/frames/viewsource-attribute.html -/sdcard/android/layout_tests/fast/frames/valid.html -/sdcard/android/layout_tests/fast/frames/onlyCommentInIFrame.html -/sdcard/android/layout_tests/fast/frames/no-frame-borders.html -/sdcard/android/layout_tests/fast/frames/invalid.html -/sdcard/android/layout_tests/fast/frames/inline-object-inside-frameset.html -/sdcard/android/layout_tests/fast/frames/iframe-with-frameborder.html -/sdcard/android/layout_tests/fast/frames/iframe-text-contents.html -/sdcard/android/layout_tests/fast/frames/iframe-scrolling-attribute.html -/sdcard/android/layout_tests/fast/frames/frameset-style-recalc.html -/sdcard/android/layout_tests/fast/frames/frameElement-iframe.html -/sdcard/android/layout_tests/fast/frames/frameElement-frame.html -/sdcard/android/layout_tests/fast/frames/frame-src-attribute.html -/sdcard/android/layout_tests/fast/frames/frame-set-whitespace-attributes.html -/sdcard/android/layout_tests/fast/frames/frame-scrolling-attribute.html -/sdcard/android/layout_tests/fast/frames/frame-navigation.html -/sdcard/android/layout_tests/fast/frames/frame-length-fractional.html -/sdcard/android/layout_tests/fast/frames/frame-element-name.html -/sdcard/android/layout_tests/fast/frames/empty-cols-attribute.html -/sdcard/android/layout_tests/fast/frames/contentWindow_iFrame.html -/sdcard/android/layout_tests/fast/frames/contentWindow_Frame.html -/sdcard/android/layout_tests/fast/frames/calculate-round.html -/sdcard/android/layout_tests/fast/frames/calculate-relative.html -/sdcard/android/layout_tests/fast/frames/calculate-percentage.html -/sdcard/android/layout_tests/fast/frames/calculate-order.html -/sdcard/android/layout_tests/fast/frames/calculate-fixed.html -/sdcard/android/layout_tests/fast/frames/002.html -/sdcard/android/layout_tests/fast/frames/001.html -/sdcard/android/layout_tests/fast/forms/thumbslider-no-parent-slider.html -/sdcard/android/layout_tests/fast/forms/thumbslider-crash.html -/sdcard/android/layout_tests/fast/forms/textfield-outline.html -/sdcard/android/layout_tests/fast/forms/textfield-drag-into-disabled.html -/sdcard/android/layout_tests/fast/forms/textAreaLineHeight.html -/sdcard/android/layout_tests/fast/forms/textarea-width.html -/sdcard/android/layout_tests/fast/forms/textarea-setinnerhtml.html -/sdcard/android/layout_tests/fast/forms/textarea-scrolled-type.html -/sdcard/android/layout_tests/fast/forms/textarea-rows-cols.html -/sdcard/android/layout_tests/fast/forms/slider-thumb-shared-style.html -/sdcard/android/layout_tests/fast/forms/slider-padding.html -/sdcard/android/layout_tests/fast/forms/select-writing-direction-natural.html -/sdcard/android/layout_tests/fast/forms/select-size.html -/sdcard/android/layout_tests/fast/forms/select-selected.html -/sdcard/android/layout_tests/fast/forms/select-list-box-with-height.html -/sdcard/android/layout_tests/fast/forms/select-initial-position.html -/sdcard/android/layout_tests/fast/forms/select-display-none-style-resolve.html -/sdcard/android/layout_tests/fast/forms/select-disabled-appearance.html -/sdcard/android/layout_tests/fast/forms/select-change-popup-to-listbox.html -/sdcard/android/layout_tests/fast/forms/select-change-listbox-to-popup.html -/sdcard/android/layout_tests/fast/forms/select-change-listbox-size.html -/sdcard/android/layout_tests/fast/forms/select-block-background.html -/sdcard/android/layout_tests/fast/forms/select-baseline.html -/sdcard/android/layout_tests/fast/forms/select-align.html -/sdcard/android/layout_tests/fast/forms/search-placeholder-value-changed.html -/sdcard/android/layout_tests/fast/forms/search-display-none-cancel-button.html -/sdcard/android/layout_tests/fast/forms/radio_checked_dynamic.html -/sdcard/android/layout_tests/fast/forms/radio_checked.html +/sdcard/android/layout_tests/fast/images/favicon-as-image.html +/sdcard/android/layout_tests/fast/images/svg-width-100p-as-background.html +/sdcard/android/layout_tests/fast/inline-block/14498-positionForCoordinates.html +/sdcard/android/layout_tests/fast/inline-block/001.html +/sdcard/android/layout_tests/fast/inline-block/002.html +/sdcard/android/layout_tests/fast/inline-block/003.html +/sdcard/android/layout_tests/fast/inline-block/004.html +/sdcard/android/layout_tests/fast/inline-block/005.html +/sdcard/android/layout_tests/fast/inline-block/contenteditable-baseline.html +/sdcard/android/layout_tests/fast/inline-block/006.html +/sdcard/android/layout_tests/fast/inline-block/inline-block-vertical-align.html +/sdcard/android/layout_tests/fast/inline-block/tricky-baseline.html +/sdcard/android/layout_tests/fast/inline-block/overflow-clip.html +/sdcard/android/layout_tests/fast/inspector/matchedrules.html +/sdcard/android/layout_tests/fast/inspector/style.html +/sdcard/android/layout_tests/fast/flexbox/001.html +/sdcard/android/layout_tests/fast/flexbox/010.html +/sdcard/android/layout_tests/fast/flexbox/020.html +/sdcard/android/layout_tests/fast/flexbox/002.html +/sdcard/android/layout_tests/fast/flexbox/011.html +/sdcard/android/layout_tests/fast/flexbox/021.html +/sdcard/android/layout_tests/fast/flexbox/003.html +/sdcard/android/layout_tests/fast/flexbox/012.html +/sdcard/android/layout_tests/fast/flexbox/022.html +/sdcard/android/layout_tests/fast/flexbox/004.html +/sdcard/android/layout_tests/fast/flexbox/013.html +/sdcard/android/layout_tests/fast/flexbox/023.html +/sdcard/android/layout_tests/fast/flexbox/005.html +/sdcard/android/layout_tests/fast/flexbox/014.html +/sdcard/android/layout_tests/fast/flexbox/015.html +/sdcard/android/layout_tests/fast/flexbox/006.html +/sdcard/android/layout_tests/fast/flexbox/024.html +/sdcard/android/layout_tests/fast/flexbox/016.html +/sdcard/android/layout_tests/fast/flexbox/007.html +/sdcard/android/layout_tests/fast/flexbox/025.html +/sdcard/android/layout_tests/fast/flexbox/008.html +/sdcard/android/layout_tests/fast/flexbox/017.html +/sdcard/android/layout_tests/fast/flexbox/026.html +/sdcard/android/layout_tests/fast/flexbox/009.html +/sdcard/android/layout_tests/fast/flexbox/018.html +/sdcard/android/layout_tests/fast/flexbox/019.html +/sdcard/android/layout_tests/fast/flexbox/flex-hang.html +/sdcard/android/layout_tests/fast/tokenizer/missing-style-end-tag-1.html +/sdcard/android/layout_tests/fast/tokenizer/002.html +/sdcard/android/layout_tests/fast/tokenizer/missing-title-end-tag-2.html +/sdcard/android/layout_tests/fast/tokenizer/script-after-frameset.html +/sdcard/android/layout_tests/fast/tokenizer/missing-style-end-tag-2.html +/sdcard/android/layout_tests/fast/tokenizer/external-script-document-write.html +/sdcard/android/layout_tests/fast/tokenizer/script_extra_close.html +/sdcard/android/layout_tests/fast/tokenizer/001.html +/sdcard/android/layout_tests/fast/tokenizer/003.html +/sdcard/android/layout_tests/fast/tokenizer/missing-title-end-tag-1.html +/sdcard/android/layout_tests/fast/tokenizer/external-script-document-write_2.html +/sdcard/android/layout_tests/fast/box-shadow/border-radius-big.html +/sdcard/android/layout_tests/fast/box-shadow/basic-shadows.html +/sdcard/android/layout_tests/fast/js/exception-linenums-in-html-3.html +/sdcard/android/layout_tests/fast/body-propagation/background-image/001.html +/sdcard/android/layout_tests/fast/body-propagation/background-image/002.html +/sdcard/android/layout_tests/fast/body-propagation/background-image/003.html +/sdcard/android/layout_tests/fast/body-propagation/background-image/004.html +/sdcard/android/layout_tests/fast/body-propagation/background-image/005.html +/sdcard/android/layout_tests/fast/body-propagation/background-image/006.html +/sdcard/android/layout_tests/fast/body-propagation/background-image/007.html +/sdcard/android/layout_tests/fast/body-propagation/background-image/008.html +/sdcard/android/layout_tests/fast/body-propagation/background-image/009.html +/sdcard/android/layout_tests/fast/body-propagation/overflow/001.html +/sdcard/android/layout_tests/fast/body-propagation/overflow/002.html +/sdcard/android/layout_tests/fast/body-propagation/overflow/003.html +/sdcard/android/layout_tests/fast/body-propagation/overflow/004.html +/sdcard/android/layout_tests/fast/body-propagation/overflow/005.html +/sdcard/android/layout_tests/fast/body-propagation/overflow/006.html +/sdcard/android/layout_tests/fast/body-propagation/overflow/007.html +/sdcard/android/layout_tests/fast/body-propagation/background-color/001.html +/sdcard/android/layout_tests/fast/body-propagation/background-color/002.html +/sdcard/android/layout_tests/fast/body-propagation/background-color/003.html +/sdcard/android/layout_tests/fast/body-propagation/background-color/004.html +/sdcard/android/layout_tests/fast/body-propagation/background-color/005.html +/sdcard/android/layout_tests/fast/body-propagation/background-color/006.html +/sdcard/android/layout_tests/fast/body-propagation/background-color/007.html +/sdcard/android/layout_tests/fast/body-propagation/background-color/008.html +/sdcard/android/layout_tests/fast/inline/continuation-outlines-with-layers.html +/sdcard/android/layout_tests/fast/inline/inline-padding-disables-text-quirk.html +/sdcard/android/layout_tests/fast/inline/emptyInlinesWithinLists.html +/sdcard/android/layout_tests/fast/inline/drawStyledEmptyInlines.html +/sdcard/android/layout_tests/fast/inline/drawStyledEmptyInlinesWithWS.html +/sdcard/android/layout_tests/fast/inline/positionedLifetime.html +/sdcard/android/layout_tests/fast/inline/dirtyLinesForInline.html +/sdcard/android/layout_tests/fast/inline/001.html +/sdcard/android/layout_tests/fast/inline/002.html +/sdcard/android/layout_tests/fast/inline/inline-text-quirk-bpm.html +/sdcard/android/layout_tests/fast/inline/inline-borders-with-bidi-override.html +/sdcard/android/layout_tests/fast/inline/styledEmptyInlinesWithBRs.html +/sdcard/android/layout_tests/fast/inline/continuation-outlines.html +/sdcard/android/layout_tests/fast/inline/outline-continuations.html +/sdcard/android/layout_tests/fast/inline/br-text-decoration.html +/sdcard/android/layout_tests/fast/inline/percentage-margins.html +/sdcard/android/layout_tests/fast/dom/HTMLTableElement/colSpan.html +/sdcard/android/layout_tests/fast/dom/HTMLTableElement/createCaption.html +/sdcard/android/layout_tests/fast/dom/HTMLDocument/frameless-location-bugzilla10837.html +/sdcard/android/layout_tests/fast/dom/Document/early-document-access.html : has expected results +/sdcard/android/layout_tests/fast/dom/Element/null-offset-parent.html +/sdcard/android/layout_tests/fast/dom/Element/class-attribute-whitespace.html +/sdcard/android/layout_tests/fast/dom/HTMLLinkElement/pending-stylesheet-count.html +/sdcard/android/layout_tests/fast/dom/HTMLStyleElement/insert-parser-generated.html +/sdcard/android/layout_tests/fast/dom/HTMLInputElement/input-image-alt-text.html +/sdcard/android/layout_tests/fast/dom/Window/timeout-released-on-close.html : has expected results +/sdcard/android/layout_tests/fast/dom/Window/open-existing-pop-up-blocking.html +/sdcard/android/layout_tests/fast/dom/Window/global-opener-function.html : has expected results +/sdcard/android/layout_tests/fast/dom/Window/window-property-shadowing.html : has expected results +/sdcard/android/layout_tests/fast/dom/Window/closure-access-after-navigation-window.html : has expected results +/sdcard/android/layout_tests/fast/dom/Window/remove-timeout-crash.html : has expected results +/sdcard/android/layout_tests/fast/dom/Window/window-special-properties.html : has expected results +/sdcard/android/layout_tests/fast/dom/Window/timeout-callback-scope.html : has expected results +/sdcard/android/layout_tests/fast/dom/Window/window-property-shadowing-name.html : has expected results +/sdcard/android/layout_tests/fast/dom/HTMLObjectElement/vspace-hspace-as-number.html +/sdcard/android/layout_tests/fast/dom/HTMLElement/bdo.html +/sdcard/android/layout_tests/fast/dom/Range/surroundContents-1.html +/sdcard/android/layout_tests/fast/dom/Range/create-contextual-fragment.html +/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead1.html +/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead2.html +/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead3.html +/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead4.html +/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead5.html +/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/head-link-style-href-check.html +/sdcard/android/layout_tests/fast/dom/HTMLTextAreaElement/reset-textarea.html +/sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-alt-text.html +/sdcard/android/layout_tests/fast/dom/dom-parse-serialize.html +/sdcard/android/layout_tests/fast/dom/focus-contenteditable.html +/sdcard/android/layout_tests/fast/dom/jsDevicePixelRatio.html +/sdcard/android/layout_tests/fast/dom/isindex-001.html +/sdcard/android/layout_tests/fast/dom/css-cached-import-rule.html +/sdcard/android/layout_tests/fast/dom/dom-parse-serialize-display.html +/sdcard/android/layout_tests/fast/dom/css-rule-functions.html +/sdcard/android/layout_tests/fast/dom/createDocumentType.html +/sdcard/android/layout_tests/fast/dom/clientWidthAfterDocumentIsRemoved.html +/sdcard/android/layout_tests/fast/dom/css-inline-style-important.html +/sdcard/android/layout_tests/fast/dom/replaceChild.html +/sdcard/android/layout_tests/fast/dom/anchor-text.html +/sdcard/android/layout_tests/fast/dom/importNodeHTML.html +/sdcard/android/layout_tests/fast/dom/gc-10.html +/sdcard/android/layout_tests/fast/dom/inner-text.html +/sdcard/android/layout_tests/fast/dom/isindex-002.html +/sdcard/android/layout_tests/fast/dom/outerText.html +/sdcard/android/layout_tests/fast/dom/setAttributeNS.html : has expected results +/sdcard/android/layout_tests/fast/dom/anchor-toString.html : has expected results +/sdcard/android/layout_tests/fast/dom/documenturi-affects-relative-paths.html : has expected results +/sdcard/android/layout_tests/fast/dom/setAttribute-using-initial-input-value.html : has expected results +/sdcard/android/layout_tests/fast/dom/blur-contenteditable.html +/sdcard/android/layout_tests/fast/dom/setPrimitiveValue.html +/sdcard/android/layout_tests/fast/dom/delete-contents.html +/sdcard/android/layout_tests/fast/dom/children-nodes.html +/sdcard/android/layout_tests/fast/dom/css-mediarule-deleteRule-update.html +/sdcard/android/layout_tests/fast/dom/attr_dead_doc.html +/sdcard/android/layout_tests/fast/dom/clone-contents-0-end-offset.html +/sdcard/android/layout_tests/fast/dom/comment-not-documentElement.html +/sdcard/android/layout_tests/fast/dom/clone-node-dynamic-style.html +/sdcard/android/layout_tests/fast/dom/css-mediarule-insertRule-update.html +/sdcard/android/layout_tests/fast/dom/set-frame-src-while-running-script-in-frame.html : has expected results +/sdcard/android/layout_tests/fast/dom/stripNullFromTextNodes.html +/sdcard/android/layout_tests/fast/dom/null-document-location-put-crash.html : has expected results +/sdcard/android/layout_tests/fast/dom/document-scripts.html : has expected results +/sdcard/android/layout_tests/fast/invalid/test-case-tr-th-td-should-not-close-dl-list.html : has expected results +/sdcard/android/layout_tests/fast/invalid/table-inside-stray-table-content.html +/sdcard/android/layout_tests/fast/invalid/010.html +/sdcard/android/layout_tests/fast/invalid/002.html +/sdcard/android/layout_tests/fast/invalid/012.html +/sdcard/android/layout_tests/fast/invalid/004.html +/sdcard/android/layout_tests/fast/invalid/014.html +/sdcard/android/layout_tests/fast/invalid/006.html +/sdcard/android/layout_tests/fast/invalid/016.html +/sdcard/android/layout_tests/fast/invalid/008.html +/sdcard/android/layout_tests/fast/invalid/018.html +/sdcard/android/layout_tests/fast/invalid/junk-data.xml +/sdcard/android/layout_tests/fast/invalid/missing-dl-end-tag.html +/sdcard/android/layout_tests/fast/invalid/td-inside-object.html +/sdcard/android/layout_tests/fast/invalid/table-residual-style-crash.html +/sdcard/android/layout_tests/fast/invalid/missing-font-end-tag.html +/sdcard/android/layout_tests/fast/invalid/missing-dt-end-tag.html +/sdcard/android/layout_tests/fast/invalid/020.xml +/sdcard/android/layout_tests/fast/invalid/001.html +/sdcard/android/layout_tests/fast/invalid/nestedh3s.html +/sdcard/android/layout_tests/fast/invalid/011.html +/sdcard/android/layout_tests/fast/invalid/003.html +/sdcard/android/layout_tests/fast/invalid/021.html +/sdcard/android/layout_tests/fast/invalid/013.html +/sdcard/android/layout_tests/fast/invalid/005.html +/sdcard/android/layout_tests/fast/invalid/015.html +/sdcard/android/layout_tests/fast/invalid/007.html +/sdcard/android/layout_tests/fast/invalid/residual-style.html +/sdcard/android/layout_tests/fast/invalid/017.html +/sdcard/android/layout_tests/fast/invalid/009.html +/sdcard/android/layout_tests/fast/invalid/missing-address-end-tag.html +/sdcard/android/layout_tests/fast/invalid/019.html +/sdcard/android/layout_tests/fast/forms/input-width.html +/sdcard/android/layout_tests/fast/forms/select-item-background-clip.html /sdcard/android/layout_tests/fast/forms/radio-nested-labels.html -/sdcard/android/layout_tests/fast/forms/radio-attr-order.html -/sdcard/android/layout_tests/fast/forms/preserveFormDuringResidualStyle.html +/sdcard/android/layout_tests/fast/forms/thumbslider-crash.html +/sdcard/android/layout_tests/fast/forms/input-first-letter.html +/sdcard/android/layout_tests/fast/forms/input-appearance-preventDefault.html /sdcard/android/layout_tests/fast/forms/plaintext-mode-2.html -/sdcard/android/layout_tests/fast/forms/placeholder-set-attribute.html -/sdcard/android/layout_tests/fast/forms/placeholder-pseudo-style.html -/sdcard/android/layout_tests/fast/forms/password-placeholder.html +/sdcard/android/layout_tests/fast/forms/input-double-click-selection-gap-bug.html +/sdcard/android/layout_tests/fast/forms/preserveFormDuringResidualStyle.html +/sdcard/android/layout_tests/fast/forms/select-change-popup-to-listbox.html +/sdcard/android/layout_tests/fast/forms/input-text-maxlength.html +/sdcard/android/layout_tests/fast/forms/blankbuttons.html /sdcard/android/layout_tests/fast/forms/password-placeholder-text-security.html +/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label05.html +/sdcard/android/layout_tests/fast/forms/visual-hebrew-text-field.html +/sdcard/android/layout_tests/fast/forms/textarea-trailing-newline.html : has expected results +/sdcard/android/layout_tests/fast/forms/legend-access-key.html : has expected results +/sdcard/android/layout_tests/fast/forms/textfield-overflow.html +/sdcard/android/layout_tests/fast/forms/005.html +/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label02.html +/sdcard/android/layout_tests/fast/forms/file-input-disabled.html +/sdcard/android/layout_tests/fast/forms/input-appearance-visibility.html +/sdcard/android/layout_tests/fast/forms/select-disabled-appearance.html +/sdcard/android/layout_tests/fast/forms/input-type-change2.html +/sdcard/android/layout_tests/fast/forms/select-block-background.html +/sdcard/android/layout_tests/fast/forms/file-input-direction.html +/sdcard/android/layout_tests/fast/forms/select-visual-hebrew.html +/sdcard/android/layout_tests/fast/forms/select-change-listbox-size.html +/sdcard/android/layout_tests/fast/forms/002.html +/sdcard/android/layout_tests/fast/forms/textarea-align.html +/sdcard/android/layout_tests/fast/forms/control-restrict-line-height.html +/sdcard/android/layout_tests/fast/forms/textAreaLineHeight.html +/sdcard/android/layout_tests/fast/forms/button-generated-content.html /sdcard/android/layout_tests/fast/forms/option-text-clip.html -/sdcard/android/layout_tests/fast/forms/option-strip-whitespace.html -/sdcard/android/layout_tests/fast/forms/option-script.html -/sdcard/android/layout_tests/fast/forms/option-index.html -/sdcard/android/layout_tests/fast/forms/negativeLineHeight.html -/sdcard/android/layout_tests/fast/forms/minWidthPercent.html -/sdcard/android/layout_tests/fast/forms/menulist-width-change.html -/sdcard/android/layout_tests/fast/forms/menulist-separator-painting.html -/sdcard/android/layout_tests/fast/forms/menulist-restrict-line-height.html +/sdcard/android/layout_tests/fast/forms/textfield-drag-into-disabled.html +/sdcard/android/layout_tests/fast/forms/input-text-paste-maxlength.html +/sdcard/android/layout_tests/fast/forms/tabs-with-modifiers.html : has expected results +/sdcard/android/layout_tests/fast/forms/saved-state-adoptNode-crash.html : has expected results +/sdcard/android/layout_tests/fast/forms/input-readonly-autoscroll.html +/sdcard/android/layout_tests/fast/forms/thumbslider-no-parent-slider.html +/sdcard/android/layout_tests/fast/forms/textfield-outline.html +/sdcard/android/layout_tests/fast/forms/button-text-transform.html +/sdcard/android/layout_tests/fast/forms/radio-check-click-and-drag.html : has expected results +/sdcard/android/layout_tests/fast/forms/textarea-scroll-height.html +/sdcard/android/layout_tests/fast/forms/button-table-styles.html +/sdcard/android/layout_tests/fast/forms/textarea-setinnerhtml.html +/sdcard/android/layout_tests/fast/forms/input-align.html +/sdcard/android/layout_tests/fast/forms/box-shadow-override.html +/sdcard/android/layout_tests/fast/forms/button-cannot-be-nested.html +/sdcard/android/layout_tests/fast/forms/input-type-change.html +/sdcard/android/layout_tests/fast/forms/checkbox-radio-onchange.html +/sdcard/android/layout_tests/fast/forms/input-spaces.html +/sdcard/android/layout_tests/fast/forms/dragging-to-file-input.html : has expected results /sdcard/android/layout_tests/fast/forms/menulist-option-wrap.html -/sdcard/android/layout_tests/fast/forms/menulist-no-overflow.html -/sdcard/android/layout_tests/fast/forms/menulist-narrow-width.html -/sdcard/android/layout_tests/fast/forms/menulist-deselect-update.html -/sdcard/android/layout_tests/fast/forms/menulist-clip.html -/sdcard/android/layout_tests/fast/forms/listbox-width-change.html -/sdcard/android/layout_tests/fast/forms/listbox-selection-2.html -/sdcard/android/layout_tests/fast/forms/listbox-scrollbar-incremental-load.html -/sdcard/android/layout_tests/fast/forms/listbox-deselect-scroll.html -/sdcard/android/layout_tests/fast/forms/listbox-clip.html -/sdcard/android/layout_tests/fast/forms/input-width.html +/sdcard/android/layout_tests/fast/forms/float-before-fieldset.html +/sdcard/android/layout_tests/fast/forms/radio_checked.html +/sdcard/android/layout_tests/fast/forms/minWidthPercent.html +/sdcard/android/layout_tests/fast/forms/form-post-urlencoded.html : has expected results /sdcard/android/layout_tests/fast/forms/input-value.html -/sdcard/android/layout_tests/fast/forms/input-type-text-min-width.html -/sdcard/android/layout_tests/fast/forms/input-type-change2.html -/sdcard/android/layout_tests/fast/forms/input-type-change.html -/sdcard/android/layout_tests/fast/forms/input-text-word-wrap.html -/sdcard/android/layout_tests/fast/forms/input-text-self-emptying-click.html -/sdcard/android/layout_tests/fast/forms/input-text-scroll-left-on-blur.html -/sdcard/android/layout_tests/fast/forms/input-text-paste-maxlength.html -/sdcard/android/layout_tests/fast/forms/input-text-option-delete.html -/sdcard/android/layout_tests/fast/forms/input-text-maxlength.html +/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label06.html +/sdcard/android/layout_tests/fast/forms/placeholder-pseudo-style.html +/sdcard/android/layout_tests/fast/forms/menulist-width-change.html +/sdcard/android/layout_tests/fast/forms/option-strip-whitespace.html /sdcard/android/layout_tests/fast/forms/input-text-drag-down.html -/sdcard/android/layout_tests/fast/forms/input-text-double-click.html +/sdcard/android/layout_tests/fast/forms/select-selected.html +/sdcard/android/layout_tests/fast/forms/006.html +/sdcard/android/layout_tests/fast/forms/control-clip-overflow.html +/sdcard/android/layout_tests/fast/forms/input-appearance-default-bkcolor.html +/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label03.html +/sdcard/android/layout_tests/fast/forms/003.html +/sdcard/android/layout_tests/fast/forms/button-default-title.html +/sdcard/android/layout_tests/fast/forms/hidden-listbox.html +/sdcard/android/layout_tests/fast/forms/input-no-renderer.html /sdcard/android/layout_tests/fast/forms/input-text-click-outside.html -/sdcard/android/layout_tests/fast/forms/input-text-click-inside.html +/sdcard/android/layout_tests/fast/forms/input-baseline.html +/sdcard/android/layout_tests/fast/forms/targeted-frame-submission.html /sdcard/android/layout_tests/fast/forms/input-table.html -/sdcard/android/layout_tests/fast/forms/input-spaces.html -/sdcard/android/layout_tests/fast/forms/input-readonly-empty.html +/sdcard/android/layout_tests/fast/forms/select-change-listbox-to-popup.html +/sdcard/android/layout_tests/fast/forms/select-align.html +/sdcard/android/layout_tests/fast/forms/radio_checked_dynamic.html +/sdcard/android/layout_tests/fast/forms/select-writing-direction-natural.html +/sdcard/android/layout_tests/fast/forms/hidden-input-file.html +/sdcard/android/layout_tests/fast/forms/menulist-deselect-update.html +/sdcard/android/layout_tests/fast/forms/button-sizes.html +/sdcard/android/layout_tests/fast/forms/slider-thumb-stylability.html /sdcard/android/layout_tests/fast/forms/input-readonly-dimmed.html -/sdcard/android/layout_tests/fast/forms/input-readonly-autoscroll.html -/sdcard/android/layout_tests/fast/forms/input-paste-undo.html -/sdcard/android/layout_tests/fast/forms/input-no-renderer.html -/sdcard/android/layout_tests/fast/forms/input-field-text-truncated.html -/sdcard/android/layout_tests/fast/forms/input-double-click-selection-gap-bug.html -/sdcard/android/layout_tests/fast/forms/input-disabled-color.html -/sdcard/android/layout_tests/fast/forms/input-baseline.html /sdcard/android/layout_tests/fast/forms/input-appearance-width.html -/sdcard/android/layout_tests/fast/forms/input-appearance-visibility.html -/sdcard/android/layout_tests/fast/forms/input-appearance-selection.html +/sdcard/android/layout_tests/fast/forms/listbox-scrollbar-incremental-load.html +/sdcard/android/layout_tests/fast/forms/password-placeholder.html +/sdcard/android/layout_tests/fast/forms/select-list-box-with-height.html +/sdcard/android/layout_tests/fast/forms/button-align.html +/sdcard/android/layout_tests/fast/forms/textarea-rows-cols.html +/sdcard/android/layout_tests/fast/forms/listbox-deselect-scroll.html /sdcard/android/layout_tests/fast/forms/input-appearance-readonly.html -/sdcard/android/layout_tests/fast/forms/input-appearance-preventDefault.html -/sdcard/android/layout_tests/fast/forms/input-appearance-height.html -/sdcard/android/layout_tests/fast/forms/input-appearance-focus.html -/sdcard/android/layout_tests/fast/forms/input-appearance-default-bkcolor.html -/sdcard/android/layout_tests/fast/forms/input-appearance-bkcolor.html -/sdcard/android/layout_tests/fast/forms/input-align.html +/sdcard/android/layout_tests/fast/forms/select-initial-position.html +/sdcard/android/layout_tests/fast/forms/menulist-no-overflow.html +/sdcard/android/layout_tests/fast/forms/formmove2.html +/sdcard/android/layout_tests/fast/forms/placeholder-set-attribute.html +/sdcard/android/layout_tests/fast/forms/radio-attr-order.html +/sdcard/android/layout_tests/fast/forms/input-disabled-color.html +/sdcard/android/layout_tests/fast/forms/fieldset-align.html +/sdcard/android/layout_tests/fast/forms/select-baseline.html +/sdcard/android/layout_tests/fast/forms/input-text-word-wrap.html +/sdcard/android/layout_tests/fast/forms/stuff-on-my-optgroup.html +/sdcard/android/layout_tests/fast/forms/listbox-selection-2.html +/sdcard/android/layout_tests/fast/forms/input-readonly-empty.html /sdcard/android/layout_tests/fast/forms/input-align-image.html +/sdcard/android/layout_tests/fast/forms/input-selection-hidden.html : has expected results +/sdcard/android/layout_tests/fast/forms/option-index.html /sdcard/android/layout_tests/fast/forms/indeterminate.html -/sdcard/android/layout_tests/fast/forms/image-border.html -/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label07.html -/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label06.html -/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label05.html +/sdcard/android/layout_tests/fast/forms/negativeLineHeight.html +/sdcard/android/layout_tests/fast/forms/007.html /sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label04.html -/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label03.html -/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label02.html +/sdcard/android/layout_tests/fast/forms/select-style.html +/sdcard/android/layout_tests/fast/forms/select-size.html +/sdcard/android/layout_tests/fast/forms/input-appearance-disabled.html +/sdcard/android/layout_tests/fast/forms/input-appearance-height.html +/sdcard/android/layout_tests/fast/forms/004.html +/sdcard/android/layout_tests/fast/forms/menulist-separator-painting.html /sdcard/android/layout_tests/fast/forms/HTMLOptionElement_label01.html -/sdcard/android/layout_tests/fast/forms/hidden-listbox.html -/sdcard/android/layout_tests/fast/forms/hidden-input-file.html -/sdcard/android/layout_tests/fast/forms/formmove3.html -/sdcard/android/layout_tests/fast/forms/formmove2.html -/sdcard/android/layout_tests/fast/forms/formmove.html -/sdcard/android/layout_tests/fast/forms/form-hides-table.html -/sdcard/android/layout_tests/fast/forms/float-before-fieldset.html -/sdcard/android/layout_tests/fast/forms/file-input-disabled.html -/sdcard/android/layout_tests/fast/forms/file-input-direction.html /sdcard/android/layout_tests/fast/forms/fieldset-with-float.html -/sdcard/android/layout_tests/fast/forms/fieldset-align.html -/sdcard/android/layout_tests/fast/forms/dragging-to-file-input.html -/sdcard/android/layout_tests/fast/forms/dragging-to-disabled-file-input.html -/sdcard/android/layout_tests/fast/forms/disabled-select-change-index.html -/sdcard/android/layout_tests/fast/forms/control-restrict-line-height.html -/sdcard/android/layout_tests/fast/forms/control-clip.html -/sdcard/android/layout_tests/fast/forms/control-clip-overflow.html -/sdcard/android/layout_tests/fast/forms/checkbox-radio-onchange.html +/sdcard/android/layout_tests/fast/forms/search-placeholder-value-changed.html +/sdcard/android/layout_tests/fast/forms/input-field-text-truncated.html +/sdcard/android/layout_tests/fast/forms/floating-textfield-relayout.html +/sdcard/android/layout_tests/fast/forms/add-remove-form-elements-stress-test.html : has expected results +/sdcard/android/layout_tests/fast/forms/button-inner-block-reuse.html +/sdcard/android/layout_tests/fast/forms/input-type-text-min-width.html +/sdcard/android/layout_tests/fast/forms/onchange-enter-submit.html : has expected results +/sdcard/android/layout_tests/fast/forms/slider-thumb-shared-style.html +/sdcard/android/layout_tests/fast/forms/option-script.html +/sdcard/android/layout_tests/fast/forms/input-paste-undo.html +/sdcard/android/layout_tests/fast/forms/input-text-click-inside.html +/sdcard/android/layout_tests/fast/forms/input-appearance-selection.html /sdcard/android/layout_tests/fast/forms/button-white-space.html -/sdcard/android/layout_tests/fast/forms/button-text-transform.html -/sdcard/android/layout_tests/fast/forms/button-table-styles.html +/sdcard/android/layout_tests/fast/forms/menulist-narrow-width.html +/sdcard/android/layout_tests/fast/forms/slider-padding.html +/sdcard/android/layout_tests/fast/forms/menulist-restrict-line-height.html +/sdcard/android/layout_tests/fast/forms/textarea-width.html +/sdcard/android/layout_tests/fast/forms/input-text-double-click.html /sdcard/android/layout_tests/fast/forms/button-submit.html -/sdcard/android/layout_tests/fast/forms/button-sizes.html +/sdcard/android/layout_tests/fast/forms/disabled-select-change-index.html +/sdcard/android/layout_tests/fast/forms/formmove3.html +/sdcard/android/layout_tests/fast/forms/listbox-width-change.html +/sdcard/android/layout_tests/fast/forms/input-text-self-emptying-click.html +/sdcard/android/layout_tests/fast/forms/input-appearance-bkcolor.html /sdcard/android/layout_tests/fast/forms/button-positioned.html -/sdcard/android/layout_tests/fast/forms/button-inner-block-reuse.html -/sdcard/android/layout_tests/fast/forms/button-generated-content.html -/sdcard/android/layout_tests/fast/forms/button-default-title.html -/sdcard/android/layout_tests/fast/forms/button-cannot-be-nested.html -/sdcard/android/layout_tests/fast/forms/button-align.html -/sdcard/android/layout_tests/fast/forms/box-shadow-override.html -/sdcard/android/layout_tests/fast/forms/blankbuttons.html -/sdcard/android/layout_tests/fast/forms/006.html -/sdcard/android/layout_tests/fast/forms/005.html -/sdcard/android/layout_tests/fast/forms/004.html -/sdcard/android/layout_tests/fast/forms/003.html -/sdcard/android/layout_tests/fast/forms/002.html -/sdcard/android/layout_tests/fast/forms/001.html -/sdcard/android/layout_tests/fast/flexbox/flex-hang.html -/sdcard/android/layout_tests/fast/flexbox/026.html -/sdcard/android/layout_tests/fast/flexbox/025.html -/sdcard/android/layout_tests/fast/flexbox/024.html -/sdcard/android/layout_tests/fast/flexbox/023.html -/sdcard/android/layout_tests/fast/flexbox/022.html -/sdcard/android/layout_tests/fast/flexbox/021.html -/sdcard/android/layout_tests/fast/flexbox/020.html -/sdcard/android/layout_tests/fast/flexbox/019.html -/sdcard/android/layout_tests/fast/flexbox/018.html -/sdcard/android/layout_tests/fast/flexbox/017.html -/sdcard/android/layout_tests/fast/flexbox/016.html -/sdcard/android/layout_tests/fast/flexbox/015.html -/sdcard/android/layout_tests/fast/flexbox/014.html -/sdcard/android/layout_tests/fast/flexbox/013.html -/sdcard/android/layout_tests/fast/flexbox/012.html -/sdcard/android/layout_tests/fast/flexbox/011.html -/sdcard/android/layout_tests/fast/flexbox/010.html -/sdcard/android/layout_tests/fast/flexbox/009.html -/sdcard/android/layout_tests/fast/flexbox/008.html -/sdcard/android/layout_tests/fast/flexbox/007.html -/sdcard/android/layout_tests/fast/flexbox/006.html -/sdcard/android/layout_tests/fast/flexbox/005.html -/sdcard/android/layout_tests/fast/flexbox/004.html -/sdcard/android/layout_tests/fast/flexbox/003.html -/sdcard/android/layout_tests/fast/flexbox/002.html -/sdcard/android/layout_tests/fast/flexbox/001.html -/sdcard/android/layout_tests/fast/events/updateLayoutForHitTest.html -/sdcard/android/layout_tests/fast/events/standalone-image-drag-to-editable.html -/sdcard/android/layout_tests/fast/events/reveal-link-when-focused.html -/sdcard/android/layout_tests/fast/events/onloadFrameCrash.html -/sdcard/android/layout_tests/fast/events/onload-re-entry.html -/sdcard/android/layout_tests/fast/events/mouseout-dead-node.html -/sdcard/android/layout_tests/fast/events/label-focus.html -/sdcard/android/layout_tests/fast/events/keydown-1.html -/sdcard/android/layout_tests/fast/events/focusingUnloadedFrame.html -/sdcard/android/layout_tests/fast/events/event-sender-mouse-moved.html -/sdcard/android/layout_tests/fast/events/event-listener-on-link.html -/sdcard/android/layout_tests/fast/events/context-onmousedown-event.html -/sdcard/android/layout_tests/fast/events/autoscroll.html -/sdcard/android/layout_tests/fast/events/attempt-scroll-with-no-scrollbars.html -/sdcard/android/layout_tests/fast/events/5056619.html -/sdcard/android/layout_tests/fast/encoding/xmacroman-encoding-test.html -/sdcard/android/layout_tests/fast/encoding/utf-16-no-bom.xml -/sdcard/android/layout_tests/fast/encoding/utf-16-little-endian.html -/sdcard/android/layout_tests/fast/encoding/utf-16-big-endian.html -/sdcard/android/layout_tests/fast/encoding/invalid-UTF-8.html -/sdcard/android/layout_tests/fast/encoding/denormalised-voiced-japanese-chars.html -/sdcard/android/layout_tests/fast/dynamic/view-overflow.html -/sdcard/android/layout_tests/fast/dynamic/subtree-table-cell-height.html -/sdcard/android/layout_tests/fast/dynamic/subtree-parent-static-y.html -/sdcard/android/layout_tests/fast/dynamic/subtree-no-common-root-static-y.html -/sdcard/android/layout_tests/fast/dynamic/subtree-boundary-percent-height.html -/sdcard/android/layout_tests/fast/dynamic/staticY.html -/sdcard/android/layout_tests/fast/dynamic/staticY-marking-parents-regression.html -/sdcard/android/layout_tests/fast/dynamic/selection-highlight-adjust.html -/sdcard/android/layout_tests/fast/dynamic/positioned-movement-with-positioned-children.html -/sdcard/android/layout_tests/fast/dynamic/outerHTML-img.html -/sdcard/android/layout_tests/fast/dynamic/outerHTML-doc.html -/sdcard/android/layout_tests/fast/dynamic/noninlinebadness.html -/sdcard/android/layout_tests/fast/dynamic/move-node-with-selection.html -/sdcard/android/layout_tests/fast/dynamic/link-href-change.html -/sdcard/android/layout_tests/fast/dynamic/layer-hit-test-crash.html -/sdcard/android/layout_tests/fast/dynamic/insert-before-table-part-in-continuation.html -/sdcard/android/layout_tests/fast/dynamic/genContentDestroyChildren.html -/sdcard/android/layout_tests/fast/dynamic/floating-to-positioned.html -/sdcard/android/layout_tests/fast/dynamic/floating-to-positioned-2.html -/sdcard/android/layout_tests/fast/dynamic/float-withdrawal.html -/sdcard/android/layout_tests/fast/dynamic/float-withdrawal-2.html -/sdcard/android/layout_tests/fast/dynamic/float-no-longer-overhanging.html -/sdcard/android/layout_tests/fast/dynamic/float-in-trailing-whitespace-after-last-line-break.html -/sdcard/android/layout_tests/fast/dynamic/flash-replacement-test.html -/sdcard/android/layout_tests/fast/dynamic/create-renderer-for-whitespace-only-text.html -/sdcard/android/layout_tests/fast/dynamic/containing-block-change.html -/sdcard/android/layout_tests/fast/dynamic/anonymous-block-orphaned-lines.html -/sdcard/android/layout_tests/fast/dynamic/anonymous-block-layer-lost.html -/sdcard/android/layout_tests/fast/dynamic/015.html -/sdcard/android/layout_tests/fast/dynamic/014.html -/sdcard/android/layout_tests/fast/dynamic/013.html -/sdcard/android/layout_tests/fast/dynamic/012.html -/sdcard/android/layout_tests/fast/dynamic/011.html -/sdcard/android/layout_tests/fast/dynamic/010.html -/sdcard/android/layout_tests/fast/dynamic/009.html -/sdcard/android/layout_tests/fast/dynamic/008.html -/sdcard/android/layout_tests/fast/dynamic/007.html -/sdcard/android/layout_tests/fast/dynamic/006.html -/sdcard/android/layout_tests/fast/dynamic/005.html -/sdcard/android/layout_tests/fast/dynamic/004.html -/sdcard/android/layout_tests/fast/dynamic/002.html -/sdcard/android/layout_tests/fast/dynamic/001.html -/sdcard/android/layout_tests/fast/dom/Window/open-existing-pop-up-blocking.html -/sdcard/android/layout_tests/fast/dom/Window/btoa-pnglet.html -/sdcard/android/layout_tests/fast/dom/Range/surroundContents-1.html -/sdcard/android/layout_tests/fast/dom/Range/create-contextual-fragment.html -/sdcard/android/layout_tests/fast/dom/HTMLTextAreaElement/reset-textarea.html -/sdcard/android/layout_tests/fast/dom/HTMLTableElement/createCaption.html -/sdcard/android/layout_tests/fast/dom/HTMLTableElement/colSpan.html -/sdcard/android/layout_tests/fast/dom/HTMLStyleElement/insert-parser-generated.html -/sdcard/android/layout_tests/fast/dom/HTMLObjectElement/vspace-hspace-as-number.html -/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead5.html -/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead4.html -/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead3.html -/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead2.html -/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/textInHead1.html -/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/head-link-style-href-check.html -/sdcard/android/layout_tests/fast/dom/HTMLElement/bdo.html -/sdcard/android/layout_tests/fast/dom/HTMLDocument/frameless-location-bugzilla10837.html -/sdcard/android/layout_tests/fast/dom/Element/null-offset-parent.html -/sdcard/android/layout_tests/fast/dom/Document/early-document-access.html -/sdcard/android/layout_tests/fast/dom/row-inner-text.html -/sdcard/android/layout_tests/fast/dom/replaceChild.html -/sdcard/android/layout_tests/fast/dom/outerText.html -/sdcard/android/layout_tests/fast/dom/isindex-002.html -/sdcard/android/layout_tests/fast/dom/isindex-001.html -/sdcard/android/layout_tests/fast/dom/focus-contenteditable.html -/sdcard/android/layout_tests/fast/dom/dom-parse-serialize-display.html -/sdcard/android/layout_tests/fast/dom/delete-contents.html -/sdcard/android/layout_tests/fast/dom/css-rule-functions.html -/sdcard/android/layout_tests/fast/dom/css-mediarule-insertRule-update.html -/sdcard/android/layout_tests/fast/dom/css-mediarule-deleteRule-update.html -/sdcard/android/layout_tests/fast/dom/css-inline-style-important.html -/sdcard/android/layout_tests/fast/dom/css-cached-import-rule.html -/sdcard/android/layout_tests/fast/dom/clone-node-dynamic-style.html -/sdcard/android/layout_tests/fast/dom/clone-contents-0-end-offset.html -/sdcard/android/layout_tests/fast/dom/clientWidthAfterDocumentIsRemoved.html -/sdcard/android/layout_tests/fast/dom/children-nodes.html -/sdcard/android/layout_tests/fast/dom/blur-contenteditable.html -/sdcard/android/layout_tests/fast/dom/attr_dead_doc.html -/sdcard/android/layout_tests/fast/doctypes/004.html -/sdcard/android/layout_tests/fast/doctypes/003.html -/sdcard/android/layout_tests/fast/doctypes/002.html -/sdcard/android/layout_tests/fast/doctypes/001.html -/sdcard/android/layout_tests/fast/css-generated-content/wbr-with-before-content.html -/sdcard/android/layout_tests/fast/css-generated-content/visibleContentHiddenParent.html -/sdcard/android/layout_tests/fast/css-generated-content/table-with-before.html -/sdcard/android/layout_tests/fast/css-generated-content/table-row-with-before.html -/sdcard/android/layout_tests/fast/css-generated-content/table-row-group-with-before.html -/sdcard/android/layout_tests/fast/css-generated-content/table-row-group-to-inline.html -/sdcard/android/layout_tests/fast/css-generated-content/table-cell-before-content.html -/sdcard/android/layout_tests/fast/css-generated-content/spellingToolTip-assert.html -/sdcard/android/layout_tests/fast/css-generated-content/positioned-background-hit-test-crash.html -/sdcard/android/layout_tests/fast/css-generated-content/no-openclose-quote.html -/sdcard/android/layout_tests/fast/css-generated-content/inline-display-types.html -/sdcard/android/layout_tests/fast/css-generated-content/hover-style-change.html -/sdcard/android/layout_tests/fast/css-generated-content/before-with-first-letter.html -/sdcard/android/layout_tests/fast/css-generated-content/after-order.html -/sdcard/android/layout_tests/fast/css-generated-content/absolute-position-inside-inline.html -/sdcard/android/layout_tests/fast/css-generated-content/016.html -/sdcard/android/layout_tests/fast/css-generated-content/015.html -/sdcard/android/layout_tests/fast/css-generated-content/014.html -/sdcard/android/layout_tests/fast/css-generated-content/013.html -/sdcard/android/layout_tests/fast/css-generated-content/012.html -/sdcard/android/layout_tests/fast/css-generated-content/011.html -/sdcard/android/layout_tests/fast/css-generated-content/010.html -/sdcard/android/layout_tests/fast/css-generated-content/009.html -/sdcard/android/layout_tests/fast/css-generated-content/008.html -/sdcard/android/layout_tests/fast/css-generated-content/007.html -/sdcard/android/layout_tests/fast/css-generated-content/005.html -/sdcard/android/layout_tests/fast/css-generated-content/004.html -/sdcard/android/layout_tests/fast/css-generated-content/003.html -/sdcard/android/layout_tests/fast/css-generated-content/002.html -/sdcard/android/layout_tests/fast/css-generated-content/001.html -/sdcard/android/layout_tests/fast/css/variables/variable-iteration-test.html -/sdcard/android/layout_tests/fast/css/variables/shorthand-test.html -/sdcard/android/layout_tests/fast/css/variables/set-variable-test.html -/sdcard/android/layout_tests/fast/css/variables/remove-variable-test.html -/sdcard/android/layout_tests/fast/css/variables/print-test.html -/sdcard/android/layout_tests/fast/css/variables/override-test.html +/sdcard/android/layout_tests/fast/forms/search-transformed.html +/sdcard/android/layout_tests/fast/forms/image-border.html +/sdcard/android/layout_tests/fast/forms/encoding-test.html +/sdcard/android/layout_tests/fast/forms/input-type-change-in-onfocus-mouse.html : has expected results +/sdcard/android/layout_tests/fast/compact/001.html +/sdcard/android/layout_tests/fast/compact/002.html +/sdcard/android/layout_tests/fast/compact/003.html +/sdcard/android/layout_tests/fast/clip/nestedTransparencyClip.html +/sdcard/android/layout_tests/fast/clip/outline-overflowClip.html +/sdcard/android/layout_tests/fast/clip/001.html +/sdcard/android/layout_tests/fast/clip/010.html +/sdcard/android/layout_tests/fast/clip/002.html +/sdcard/android/layout_tests/fast/clip/011.html +/sdcard/android/layout_tests/fast/clip/003.html +/sdcard/android/layout_tests/fast/clip/012.html +/sdcard/android/layout_tests/fast/clip/004.html +/sdcard/android/layout_tests/fast/clip/013.html +/sdcard/android/layout_tests/fast/clip/005.html +/sdcard/android/layout_tests/fast/clip/014.html +/sdcard/android/layout_tests/fast/clip/006.html +/sdcard/android/layout_tests/fast/clip/015.html +/sdcard/android/layout_tests/fast/clip/007.html +/sdcard/android/layout_tests/fast/clip/016.html +/sdcard/android/layout_tests/fast/clip/008.html +/sdcard/android/layout_tests/fast/clip/017.html +/sdcard/android/layout_tests/fast/clip/009.html +/sdcard/android/layout_tests/fast/table/border-collapsing/001.html +/sdcard/android/layout_tests/fast/table/border-collapsing/002.html +/sdcard/android/layout_tests/fast/table/border-collapsing/003.html +/sdcard/android/layout_tests/fast/table/border-collapsing/004.html +/sdcard/android/layout_tests/fast/table/border-collapsing/equal-precedence-resolution.html +/sdcard/android/layout_tests/fast/table/border-collapsing/rtl-border-collapsing.html +/sdcard/android/layout_tests/fast/table/border-collapsing/border-collapsing-head-foot.html +/sdcard/android/layout_tests/fast/table/fixed-nested.html +/sdcard/android/layout_tests/fast/table/frame-and-rules.html +/sdcard/android/layout_tests/fast/table/empty-table-percent-height.html +/sdcard/android/layout_tests/fast/table/100-percent-cell-width.html +/sdcard/android/layout_tests/fast/table/stale-grid-crash.html +/sdcard/android/layout_tests/fast/table/div-as-col-span.html +/sdcard/android/layout_tests/fast/table/nobr.html +/sdcard/android/layout_tests/fast/table/012.html +/sdcard/android/layout_tests/fast/table/040.html +/sdcard/android/layout_tests/fast/table/growCellForImageQuirk.html +/sdcard/android/layout_tests/fast/table/024.html +/sdcard/android/layout_tests/fast/table/cell-pref-width-invalidation.html +/sdcard/android/layout_tests/fast/table/008.html +/sdcard/android/layout_tests/fast/table/036.html +/sdcard/android/layout_tests/fast/table/nested-percent-height-table.html +/sdcard/android/layout_tests/fast/table/rules-attr-dynchange1.html +/sdcard/android/layout_tests/fast/table/wide-column.html +/sdcard/android/layout_tests/fast/table/fixed-with-auto-with-colspan.html +/sdcard/android/layout_tests/fast/table/percent-heights.html +/sdcard/android/layout_tests/fast/table/021.html +/sdcard/android/layout_tests/fast/table/colspanMinWidth.html +/sdcard/android/layout_tests/fast/table/005.html +/sdcard/android/layout_tests/fast/table/033.html +/sdcard/android/layout_tests/fast/table/017.html +/sdcard/android/layout_tests/fast/table/floatingTablePaintBackground.html +/sdcard/android/layout_tests/fast/table/029.html +/sdcard/android/layout_tests/fast/table/cell-absolute-child.html +/sdcard/android/layout_tests/fast/table/click-near-anonymous-table.html +/sdcard/android/layout_tests/fast/table/auto-with-percent-height.html +/sdcard/android/layout_tests/fast/table/insert-before-anonymous-ancestors.html +/sdcard/android/layout_tests/fast/table/append-cells2.html +/sdcard/android/layout_tests/fast/table/unused-percent-heights.html +/sdcard/android/layout_tests/fast/table/max-width-integer-overflow.html +/sdcard/android/layout_tests/fast/table/vertical-align-baseline-readjust.html +/sdcard/android/layout_tests/fast/table/empty-row-crash.html +/sdcard/android/layout_tests/fast/table/002.html +/sdcard/android/layout_tests/fast/table/030.html +/sdcard/android/layout_tests/fast/table/cell-width-auto.html +/sdcard/android/layout_tests/fast/table/014.html +/sdcard/android/layout_tests/fast/table/037.xml +/sdcard/android/layout_tests/fast/table/large-width.html +/sdcard/android/layout_tests/fast/table/026.html +/sdcard/android/layout_tests/fast/table/unbreakable-images-quirk.html +/sdcard/android/layout_tests/fast/table/038.html +/sdcard/android/layout_tests/fast/table/dynamic-cellpadding.html +/sdcard/android/layout_tests/fast/table/generated-caption.html +/sdcard/android/layout_tests/fast/table/empty-cells.html +/sdcard/android/layout_tests/fast/table/add-before-anonymous-child.html +/sdcard/android/layout_tests/fast/table/011.html +/sdcard/android/layout_tests/fast/table/table-display-types-strict.html +/sdcard/android/layout_tests/fast/table/023.html +/sdcard/android/layout_tests/fast/table/007.html +/sdcard/android/layout_tests/fast/table/cellindex.html +/sdcard/android/layout_tests/fast/table/035.html +/sdcard/android/layout_tests/fast/table/colgroup-spanning-groups-rules.html +/sdcard/android/layout_tests/fast/table/insert-row-before-form.html +/sdcard/android/layout_tests/fast/table/rowspan-paint-order.html +/sdcard/android/layout_tests/fast/table/rtl-cell-display-none-assert.html +/sdcard/android/layout_tests/fast/table/insert-cell-before-form.html +/sdcard/android/layout_tests/fast/table/replaced-percent-height.html +/sdcard/android/layout_tests/fast/table/text-field-baseline.html +/sdcard/android/layout_tests/fast/table/table-display-types.html +/sdcard/android/layout_tests/fast/table/table-hspace-align-center.html +/sdcard/android/layout_tests/fast/table/caption-relayout.html +/sdcard/android/layout_tests/fast/table/020.html +/sdcard/android/layout_tests/fast/table/fixed-table-non-cell-in-row.html +/sdcard/android/layout_tests/fast/table/004.html +/sdcard/android/layout_tests/fast/table/032.html +/sdcard/android/layout_tests/fast/table/row-height-recalc.html +/sdcard/android/layout_tests/fast/table/016.html +/sdcard/android/layout_tests/fast/table/absolute-table-at-bottom.html +/sdcard/android/layout_tests/fast/table/028.html +/sdcard/android/layout_tests/fast/table/spanOverlapRepaint.html +/sdcard/android/layout_tests/fast/table/invisible-cell-background.html +/sdcard/android/layout_tests/fast/table/vertical-align-baseline.html +/sdcard/android/layout_tests/fast/table/wide-colspan.html +/sdcard/android/layout_tests/fast/table/rowindex.html +/sdcard/android/layout_tests/fast/table/001.html +/sdcard/android/layout_tests/fast/table/remove-td-display-none.html +/sdcard/android/layout_tests/fast/table/013.html +/sdcard/android/layout_tests/fast/table/041.html +/sdcard/android/layout_tests/fast/table/colgroup-preceded-by-caption.html +/sdcard/android/layout_tests/fast/table/025.html +/sdcard/android/layout_tests/fast/table/giantCellspacing.html +/sdcard/android/layout_tests/fast/table/009.html +/sdcard/android/layout_tests/fast/table/edge-offsets.html +/sdcard/android/layout_tests/fast/table/giantRowspan.html +/sdcard/android/layout_tests/fast/table/010.html +/sdcard/android/layout_tests/fast/table/inline-form-assert.html +/sdcard/android/layout_tests/fast/table/overflowHidden.html +/sdcard/android/layout_tests/fast/table/rules-attr-dynchange2.html +/sdcard/android/layout_tests/fast/table/height-percent-test.html +/sdcard/android/layout_tests/fast/table/multiple-percent-height-rows.html +/sdcard/android/layout_tests/fast/table/giantRowspan2.html +/sdcard/android/layout_tests/fast/table/tableInsideCaption.html +/sdcard/android/layout_tests/fast/table/022.html +/sdcard/android/layout_tests/fast/table/006.html +/sdcard/android/layout_tests/fast/table/034.html +/sdcard/android/layout_tests/fast/table/append-cells.html +/sdcard/android/layout_tests/fast/table/018.html +/sdcard/android/layout_tests/fast/table/percent-widths-stretch.html +/sdcard/android/layout_tests/fast/table/prepend-in-anonymous-table.html +/sdcard/android/layout_tests/fast/table/floating-th.html +/sdcard/android/layout_tests/fast/table/empty-section-crash.html +/sdcard/android/layout_tests/fast/table/form-with-table-style.html +/sdcard/android/layout_tests/fast/table/003.html +/sdcard/android/layout_tests/fast/table/031.html +/sdcard/android/layout_tests/fast/table/015.html +/sdcard/android/layout_tests/fast/table/027.html +/sdcard/android/layout_tests/fast/table/039.html +/sdcard/android/layout_tests/fast/css/counters/invalidate-cached-counter-node.html +/sdcard/android/layout_tests/fast/css/counters/counter-text-security.html +/sdcard/android/layout_tests/fast/css/counters/counter-text-transform.html /sdcard/android/layout_tests/fast/css/variables/multiple-term-test.html +/sdcard/android/layout_tests/fast/css/variables/colors-test.html +/sdcard/android/layout_tests/fast/css/variables/font-test.html /sdcard/android/layout_tests/fast/css/variables/multiple-blocks-test.html /sdcard/android/layout_tests/fast/css/variables/misplaced-variables-test.html -/sdcard/android/layout_tests/fast/css/variables/misplaced-import-test.html -/sdcard/android/layout_tests/fast/css/variables/margin-test.html /sdcard/android/layout_tests/fast/css/variables/invalid-variable-test.html -/sdcard/android/layout_tests/fast/css/variables/inline-style-test.html +/sdcard/android/layout_tests/fast/css/variables/misplaced-import-test.html /sdcard/android/layout_tests/fast/css/variables/import-test.html -/sdcard/android/layout_tests/fast/css/variables/image-test.html -/sdcard/android/layout_tests/fast/css/variables/font-test.html +/sdcard/android/layout_tests/fast/css/variables/inline-style-test.html /sdcard/android/layout_tests/fast/css/variables/declaration-block-test.html -/sdcard/android/layout_tests/fast/css/variables/colors-test.html +/sdcard/android/layout_tests/fast/css/variables/margin-test.html +/sdcard/android/layout_tests/fast/css/variables/set-variable-test.html +/sdcard/android/layout_tests/fast/css/variables/override-test.html +/sdcard/android/layout_tests/fast/css/variables/remove-variable-test.html +/sdcard/android/layout_tests/fast/css/variables/variable-iteration-test.html +/sdcard/android/layout_tests/fast/css/variables/image-test.html /sdcard/android/layout_tests/fast/css/variables/block-cycle-test.html -/sdcard/android/layout_tests/fast/css/namespaces/007.xml -/sdcard/android/layout_tests/fast/css/namespaces/006.xml -/sdcard/android/layout_tests/fast/css/namespaces/005.xml -/sdcard/android/layout_tests/fast/css/namespaces/004.xml -/sdcard/android/layout_tests/fast/css/namespaces/003.xml -/sdcard/android/layout_tests/fast/css/namespaces/002.xml +/sdcard/android/layout_tests/fast/css/variables/shorthand-test.html +/sdcard/android/layout_tests/fast/css/variables/print-test.html /sdcard/android/layout_tests/fast/css/namespaces/001.xml -/sdcard/android/layout_tests/fast/css/counters/invalidate-cached-counter-node.html -/sdcard/android/layout_tests/fast/css/counters/counter-text-transform.html -/sdcard/android/layout_tests/fast/css/counters/counter-text-security.html -/sdcard/android/layout_tests/fast/css/zoom-property-parsing.html -/sdcard/android/layout_tests/fast/css/zoom-font-size.html +/sdcard/android/layout_tests/fast/css/namespaces/002.xml +/sdcard/android/layout_tests/fast/css/namespaces/003.xml +/sdcard/android/layout_tests/fast/css/namespaces/004.xml +/sdcard/android/layout_tests/fast/css/namespaces/005.xml +/sdcard/android/layout_tests/fast/css/namespaces/006.xml +/sdcard/android/layout_tests/fast/css/namespaces/007.xml +/sdcard/android/layout_tests/fast/css/font-face-in-media-rule.html +/sdcard/android/layout_tests/fast/css/font-face-default-font.html +/sdcard/android/layout_tests/fast/css/first-letter-float-after-float.html +/sdcard/android/layout_tests/fast/css/invalidation-errors-2.html +/sdcard/android/layout_tests/fast/css/line-height-negative.html +/sdcard/android/layout_tests/fast/css/only-child-pseudo-class.html +/sdcard/android/layout_tests/fast/css/008.html +/sdcard/android/layout_tests/fast/css/first-of-type-pseudo-class.html /sdcard/android/layout_tests/fast/css/ZeroOpacityLayers2.html -/sdcard/android/layout_tests/fast/css/ZeroOpacityLayers.html -/sdcard/android/layout_tests/fast/css/xml-stylesheet-pi-not-in-prolog.xml -/sdcard/android/layout_tests/fast/css/word-space-extra.html -/sdcard/android/layout_tests/fast/css/visibility-hit-test.html -/sdcard/android/layout_tests/fast/css/vertical-align-lengths.html -/sdcard/android/layout_tests/fast/css/value-list-out-of-bounds-crash.html -/sdcard/android/layout_tests/fast/css/universal-hover-quirk.html -/sdcard/android/layout_tests/fast/css/transition-color-unspecified.html -/sdcard/android/layout_tests/fast/css/transform-default-parameter.html -/sdcard/android/layout_tests/fast/css/textCapitalizeEdgeCases.html -/sdcard/android/layout_tests/fast/css/text-security.html -/sdcard/android/layout_tests/fast/css/text-align.html /sdcard/android/layout_tests/fast/css/target-fragment-match.html -/sdcard/android/layout_tests/fast/css/table-text-align-strict.html -/sdcard/android/layout_tests/fast/css/table-text-align-quirk.html -/sdcard/android/layout_tests/fast/css/style-parsed-outside-head.html -/sdcard/android/layout_tests/fast/css/style-outside-head.html -/sdcard/android/layout_tests/fast/css/simple-selector-chain-parsing.html -/sdcard/android/layout_tests/fast/css/shadow-multiple.html -/sdcard/android/layout_tests/fast/css/selector-set-attribute.html -/sdcard/android/layout_tests/fast/css/rtl-ordering.html -/sdcard/android/layout_tests/fast/css/rgb-float.html -/sdcard/android/layout_tests/fast/css/resize-corner-tracking.html -/sdcard/android/layout_tests/fast/css/quirk-orphaned-units.html -/sdcard/android/layout_tests/fast/css/position-negative-top-margin.html -/sdcard/android/layout_tests/fast/css/percentage-non-integer.html -/sdcard/android/layout_tests/fast/css/pendingStylesheetFontSize.html -/sdcard/android/layout_tests/fast/css/outline-auto-location.html -/sdcard/android/layout_tests/fast/css/outline-auto-empty-rects.html -/sdcard/android/layout_tests/fast/css/only-of-type-pseudo-class.html -/sdcard/android/layout_tests/fast/css/only-child-pseudo-class.html -/sdcard/android/layout_tests/fast/css/negative-nth-child.html -/sdcard/android/layout_tests/fast/css/max-height-none.html -/sdcard/android/layout_tests/fast/css/MarqueeLayoutTest.html /sdcard/android/layout_tests/fast/css/marginComputedStyle.html -/sdcard/android/layout_tests/fast/css/margin-top-bottom-dynamic.html -/sdcard/android/layout_tests/fast/css/margin-bottom-form-element-strict.html -/sdcard/android/layout_tests/fast/css/margin-bottom-form-element-quirk.html /sdcard/android/layout_tests/fast/css/live-cssrules.html +/sdcard/android/layout_tests/fast/css/zoom-font-size.html +/sdcard/android/layout_tests/fast/css/005.html +/sdcard/android/layout_tests/fast/css/first-letter-hover.html +/sdcard/android/layout_tests/fast/css/color-quirk.html +/sdcard/android/layout_tests/fast/css/resize-corner-tracking-transformed.html +/sdcard/android/layout_tests/fast/css/selector-set-attribute.html +/sdcard/android/layout_tests/fast/css/attribute-selector-empty-value.html +/sdcard/android/layout_tests/fast/css/line-height-overflow.html +/sdcard/android/layout_tests/fast/css/002.html +/sdcard/android/layout_tests/fast/css/empty-generated-content.html +/sdcard/android/layout_tests/fast/css/background-image-with-baseurl.html +/sdcard/android/layout_tests/fast/css/border-radius-outline-offset.html +/sdcard/android/layout_tests/fast/css/hsla-color.html +/sdcard/android/layout_tests/fast/css/first-letter-skip-out-of-flow.html +/sdcard/android/layout_tests/fast/css/font-face-multiple-remote-sources.html +/sdcard/android/layout_tests/fast/css/hover-subselector.html +/sdcard/android/layout_tests/fast/css/text-align.html : has expected results +/sdcard/android/layout_tests/fast/css/margin-bottom-form-element-strict.html +/sdcard/android/layout_tests/fast/css/shadow-multiple.html +/sdcard/android/layout_tests/fast/css/import_with_baseurl.html /sdcard/android/layout_tests/fast/css/list-outline.html -/sdcard/android/layout_tests/fast/css/link-outside-head.html +/sdcard/android/layout_tests/fast/css/apple-prefix.html /sdcard/android/layout_tests/fast/css/line-height.html -/sdcard/android/layout_tests/fast/css/line-height-overflow.html -/sdcard/android/layout_tests/fast/css/line-height-negative.html -/sdcard/android/layout_tests/fast/css/line-height-font-order.html -/sdcard/android/layout_tests/fast/css/layerZOrderCrash.html +/sdcard/android/layout_tests/fast/css/first-letter-visibility.html +/sdcard/android/layout_tests/fast/css/acid2.html +/sdcard/android/layout_tests/fast/css/font_property_normal.html +/sdcard/android/layout_tests/fast/css/css-imports.html /sdcard/android/layout_tests/fast/css/last-of-type-pseudo-class.html -/sdcard/android/layout_tests/fast/css/last-child-style-sharing.html /sdcard/android/layout_tests/fast/css/last-child-pseudo-class.html -/sdcard/android/layout_tests/fast/css/invalidation-errors.html +/sdcard/android/layout_tests/fast/css/visibility-hit-test.html +/sdcard/android/layout_tests/fast/css/absolute-poition-in-rtl-parent.html +/sdcard/android/layout_tests/fast/css/content-dynamic.html +/sdcard/android/layout_tests/fast/css/acid2-pixel.html +/sdcard/android/layout_tests/fast/css/transition-color-unspecified.html +/sdcard/android/layout_tests/fast/css/table-text-align-strict.html +/sdcard/android/layout_tests/fast/css/transform-default-parameter.html +/sdcard/android/layout_tests/fast/css/contentImage.html +/sdcard/android/layout_tests/fast/css/value-list-out-of-bounds-crash.html +/sdcard/android/layout_tests/fast/css/color-strict.html +/sdcard/android/layout_tests/fast/css/ignore-text-zoom.html +/sdcard/android/layout_tests/fast/css/max-height-none.html /sdcard/android/layout_tests/fast/css/invalidation-errors-3.html -/sdcard/android/layout_tests/fast/css/invalidation-errors-2.html +/sdcard/android/layout_tests/fast/css/empty-pseudo-class.html +/sdcard/android/layout_tests/fast/css/begin-end-contain-selector-empty-value.html +/sdcard/android/layout_tests/fast/css/find-next-layer.html +/sdcard/android/layout_tests/fast/css/contentDiv.html /sdcard/android/layout_tests/fast/css/invalid-pseudo-classes.html -/sdcard/android/layout_tests/fast/css/invalid-percentage-property.html -/sdcard/android/layout_tests/fast/css/inline-properties-important.html -/sdcard/android/layout_tests/fast/css/import_with_baseurl.html -/sdcard/android/layout_tests/fast/css/import-rule-regression-11590.html -/sdcard/android/layout_tests/fast/css/imageTileOpacity.html -/sdcard/android/layout_tests/fast/css/ignore-text-zoom.html -/sdcard/android/layout_tests/fast/css/hsla-color.html -/sdcard/android/layout_tests/fast/css/hsl-color.html -/sdcard/android/layout_tests/fast/css/hover-subselector.html -/sdcard/android/layout_tests/fast/css/font_property_normal.html +/sdcard/android/layout_tests/fast/css/disabled-author-styles.html +/sdcard/android/layout_tests/fast/css/text-security.html /sdcard/android/layout_tests/fast/css/font-weight-1.html -/sdcard/android/layout_tests/fast/css/font-size-negative.html +/sdcard/android/layout_tests/fast/css/margin-bottom-form-element-quirk.html /sdcard/android/layout_tests/fast/css/font-shorthand-weight-only.html -/sdcard/android/layout_tests/fast/css/font-face-unicode-range.html +/sdcard/android/layout_tests/fast/css/006.html +/sdcard/android/layout_tests/fast/css/fieldset-display-row.html +/sdcard/android/layout_tests/fast/css/border-height.html +/sdcard/android/layout_tests/fast/css/css2-system-fonts.html +/sdcard/android/layout_tests/fast/css/imageTileOpacity.html /sdcard/android/layout_tests/fast/css/font-face-remote.html -/sdcard/android/layout_tests/fast/css/font-face-multiple-remote-sources.html -/sdcard/android/layout_tests/fast/css/font-face-multiple-faces.html -/sdcard/android/layout_tests/fast/css/font-face-descriptor-multiple-values.html -/sdcard/android/layout_tests/fast/css/font-face-in-media-rule.html -/sdcard/android/layout_tests/fast/css/font-face-default-font.html -/sdcard/android/layout_tests/fast/css/first-of-type-pseudo-class.html -/sdcard/android/layout_tests/fast/css/first-letter-visibility.html -/sdcard/android/layout_tests/fast/css/first-letter-skip-out-of-flow.html -/sdcard/android/layout_tests/fast/css/first-letter-recalculation.html -/sdcard/android/layout_tests/fast/css/first-letter-hover.html -/sdcard/android/layout_tests/fast/css/first-letter-float.html -/sdcard/android/layout_tests/fast/css/first-letter-float-after-float.html -/sdcard/android/layout_tests/fast/css/first-letter-detach.html +/sdcard/android/layout_tests/fast/css/003.html +/sdcard/android/layout_tests/fast/css/error-in-last-decl.html +/sdcard/android/layout_tests/fast/css/zoom-property-parsing.html +/sdcard/android/layout_tests/fast/css/style-outside-head.html /sdcard/android/layout_tests/fast/css/first-letter-capitalized.html +/sdcard/android/layout_tests/fast/css/word-space-extra.html +/sdcard/android/layout_tests/fast/css/first-letter-float.html +/sdcard/android/layout_tests/fast/css/simple-selector-chain-parsing.html +/sdcard/android/layout_tests/fast/css/xml-stylesheet-pi-not-in-prolog.xml +/sdcard/android/layout_tests/fast/css/continuationCrash.html +/sdcard/android/layout_tests/fast/css/vertical-align-lengths.html /sdcard/android/layout_tests/fast/css/first-child-pseudo-class.html -/sdcard/android/layout_tests/fast/css/find-next-layer.html -/sdcard/android/layout_tests/fast/css/fieldset-display-row.html +/sdcard/android/layout_tests/fast/css/getFloatValueForUnit.html +/sdcard/android/layout_tests/fast/css/first-letter-detach.html +/sdcard/android/layout_tests/fast/css/line-height-font-order.html +/sdcard/android/layout_tests/fast/css/font-face-unicode-range.html +/sdcard/android/layout_tests/fast/css/layerZOrderCrash.html +/sdcard/android/layout_tests/fast/css/007.html +/sdcard/android/layout_tests/fast/css/import-rule-regression-11590.html +/sdcard/android/layout_tests/fast/css/last-child-style-sharing.html +/sdcard/android/layout_tests/fast/css/css3-modsel-22.html /sdcard/android/layout_tests/fast/css/ex-after-font-variant.html -/sdcard/android/layout_tests/fast/css/error-in-last-decl.html -/sdcard/android/layout_tests/fast/css/empty-pseudo-class.html -/sdcard/android/layout_tests/fast/css/empty-generated-content.html +/sdcard/android/layout_tests/fast/css/quirk-orphaned-units.html +/sdcard/android/layout_tests/fast/css/outline-auto-location.html +/sdcard/android/layout_tests/fast/css/margin-top-bottom-dynamic.html +/sdcard/android/layout_tests/fast/css/font-face-descriptor-multiple-values.html /sdcard/android/layout_tests/fast/css/empty-body-test.html -/sdcard/android/layout_tests/fast/css/dynamic-sibling-selector.html -/sdcard/android/layout_tests/fast/css/disabled-author-styles.html -/sdcard/android/layout_tests/fast/css/css3-nth-child.html -/sdcard/android/layout_tests/fast/css/css3-modsel-22.html -/sdcard/android/layout_tests/fast/css/css2-system-fonts.html -/sdcard/android/layout_tests/fast/css/css-imports.html -/sdcard/android/layout_tests/fast/css/continuationCrash.html -/sdcard/android/layout_tests/fast/css/contentImage.html -/sdcard/android/layout_tests/fast/css/contentDivWithChildren.html -/sdcard/android/layout_tests/fast/css/contentDiv.html -/sdcard/android/layout_tests/fast/css/content-dynamic.html -/sdcard/android/layout_tests/fast/css/color-quirk.html -/sdcard/android/layout_tests/fast/css/border-height.html -/sdcard/android/layout_tests/fast/css/begin-end-contain-selector-empty-value.html -/sdcard/android/layout_tests/fast/css/background-shorthand-invalid-url.html -/sdcard/android/layout_tests/fast/css/background-image-with-baseurl.html -/sdcard/android/layout_tests/fast/css/attribute-selector-empty-value.html -/sdcard/android/layout_tests/fast/css/apple-prefix.html -/sdcard/android/layout_tests/fast/css/affected-by-hover-after-style-change.html -/sdcard/android/layout_tests/fast/css/acid2.html -/sdcard/android/layout_tests/fast/css/acid2-pixel.html -/sdcard/android/layout_tests/fast/css/absolute-poition-in-rtl-parent.html -/sdcard/android/layout_tests/fast/css/008.html -/sdcard/android/layout_tests/fast/css/007.html -/sdcard/android/layout_tests/fast/css/006.html -/sdcard/android/layout_tests/fast/css/005.html +/sdcard/android/layout_tests/fast/css/link-outside-head.html +/sdcard/android/layout_tests/fast/css/font-size-negative.html +/sdcard/android/layout_tests/fast/css/position-negative-top-margin.html +/sdcard/android/layout_tests/fast/css/invalid-percentage-property.html : has expected results +/sdcard/android/layout_tests/fast/css/ZeroOpacityLayers.html +/sdcard/android/layout_tests/fast/css/only-of-type-pseudo-class.html /sdcard/android/layout_tests/fast/css/004.html -/sdcard/android/layout_tests/fast/css/003.html -/sdcard/android/layout_tests/fast/css/002.html +/sdcard/android/layout_tests/fast/css/rtl-ordering.html +/sdcard/android/layout_tests/fast/css/affected-by-hover-after-style-change.html +/sdcard/android/layout_tests/fast/css/resize-corner-tracking.html +/sdcard/android/layout_tests/fast/css/background-shorthand-invalid-url.html +/sdcard/android/layout_tests/fast/css/invalidation-errors.html +/sdcard/android/layout_tests/fast/css/MarqueeLayoutTest.html +/sdcard/android/layout_tests/fast/css/textCapitalizeEdgeCases.html /sdcard/android/layout_tests/fast/css/001.html -/sdcard/android/layout_tests/fast/compact/003.html -/sdcard/android/layout_tests/fast/compact/002.html -/sdcard/android/layout_tests/fast/compact/001.html -/sdcard/android/layout_tests/fast/clip/outline-overflowClip.html -/sdcard/android/layout_tests/fast/clip/nestedTransparencyClip.html -/sdcard/android/layout_tests/fast/clip/017.html -/sdcard/android/layout_tests/fast/clip/016.html -/sdcard/android/layout_tests/fast/clip/015.html -/sdcard/android/layout_tests/fast/clip/014.html -/sdcard/android/layout_tests/fast/clip/013.html -/sdcard/android/layout_tests/fast/clip/012.html -/sdcard/android/layout_tests/fast/clip/011.html -/sdcard/android/layout_tests/fast/clip/010.html -/sdcard/android/layout_tests/fast/clip/009.html -/sdcard/android/layout_tests/fast/clip/008.html -/sdcard/android/layout_tests/fast/clip/007.html -/sdcard/android/layout_tests/fast/clip/006.html -/sdcard/android/layout_tests/fast/clip/005.html -/sdcard/android/layout_tests/fast/clip/004.html -/sdcard/android/layout_tests/fast/clip/003.html -/sdcard/android/layout_tests/fast/clip/002.html -/sdcard/android/layout_tests/fast/clip/001.html -/sdcard/android/layout_tests/fast/canvas/zero-size-fill-rect.html -/sdcard/android/layout_tests/fast/canvas/shadow-offset-7.html -/sdcard/android/layout_tests/fast/canvas/shadow-offset-6.html -/sdcard/android/layout_tests/fast/canvas/shadow-offset-5.html -/sdcard/android/layout_tests/fast/canvas/shadow-offset-4.html -/sdcard/android/layout_tests/fast/canvas/shadow-offset-3.html -/sdcard/android/layout_tests/fast/canvas/shadow-offset-2.html -/sdcard/android/layout_tests/fast/canvas/shadow-offset-1.html -/sdcard/android/layout_tests/fast/canvas/quadraticCurveTo.xml -/sdcard/android/layout_tests/fast/canvas/patternfill-repeat.html -/sdcard/android/layout_tests/fast/canvas/image-object-in-canvas.html -/sdcard/android/layout_tests/fast/canvas/gradient-empty-path.html -/sdcard/android/layout_tests/fast/canvas/fillrect_gradient.html -/sdcard/android/layout_tests/fast/canvas/fillrect-gradient-zero-stops.html -/sdcard/android/layout_tests/fast/canvas/fill-stroke-clip-reset-path.html -/sdcard/android/layout_tests/fast/canvas/drawImage.html -/sdcard/android/layout_tests/fast/canvas/canvasDrawingIntoSelf.html -/sdcard/android/layout_tests/fast/canvas/canvas-transforms-during-path.html -/sdcard/android/layout_tests/fast/canvas/canvas-transform-skewed.html -/sdcard/android/layout_tests/fast/canvas/canvas-transform-non-invertible.html -/sdcard/android/layout_tests/fast/canvas/canvas-transform-nan.html -/sdcard/android/layout_tests/fast/canvas/canvas-transform-multiply.html -/sdcard/android/layout_tests/fast/canvas/canvas-transform-infinity.html -/sdcard/android/layout_tests/fast/canvas/canvas-transform-identity.html -/sdcard/android/layout_tests/fast/canvas/canvas-text-baseline.html -/sdcard/android/layout_tests/fast/canvas/canvas-text-alignment.html -/sdcard/android/layout_tests/fast/canvas/canvas-size-change-after-layout.html -/sdcard/android/layout_tests/fast/canvas/canvas-resize-reset.html -/sdcard/android/layout_tests/fast/canvas/canvas-bg.html -/sdcard/android/layout_tests/fast/canvas/canvas-before-css.html -/sdcard/android/layout_tests/fast/box-sizing/panels-two.html +/sdcard/android/layout_tests/fast/css/hsl-color.html +/sdcard/android/layout_tests/fast/css/first-letter-recalculation.html +/sdcard/android/layout_tests/fast/css/inline-properties-important.html +/sdcard/android/layout_tests/fast/css/dynamic-sibling-selector.html +/sdcard/android/layout_tests/fast/css/table-text-align-quirk.html +/sdcard/android/layout_tests/fast/css/outline-auto-empty-rects.html +/sdcard/android/layout_tests/fast/css/font-face-multiple-faces.html +/sdcard/android/layout_tests/fast/css/rgb-float.html +/sdcard/android/layout_tests/fast/css/pendingStylesheetFontSize.html +/sdcard/android/layout_tests/fast/css/contentDivWithChildren.html +/sdcard/android/layout_tests/fast/css/universal-hover-quirk.html +/sdcard/android/layout_tests/fast/css/css3-nth-child.html +/sdcard/android/layout_tests/fast/css/style-parsed-outside-head.html +/sdcard/android/layout_tests/fast/css/percentage-non-integer.html +/sdcard/android/layout_tests/fast/css/negative-nth-child.html /sdcard/android/layout_tests/fast/box-sizing/panels-one.html +/sdcard/android/layout_tests/fast/box-sizing/percentage-height.html /sdcard/android/layout_tests/fast/box-sizing/box-sizing.html -/sdcard/android/layout_tests/fast/box-shadow/border-radius-big.html -/sdcard/android/layout_tests/fast/box-shadow/basic-shadows.html -/sdcard/android/layout_tests/fast/borders/svg-as-border-image.html -/sdcard/android/layout_tests/fast/borders/svg-as-border-image-2.html -/sdcard/android/layout_tests/fast/borders/outline-offset-min-assert.html -/sdcard/android/layout_tests/fast/borders/inline-mask-overlay-image.html -/sdcard/android/layout_tests/fast/borders/fieldsetBorderRadius.html -/sdcard/android/layout_tests/fast/borders/borderRadiusSolid04.html -/sdcard/android/layout_tests/fast/borders/borderRadiusSolid03.html -/sdcard/android/layout_tests/fast/borders/borderRadiusSolid02.html -/sdcard/android/layout_tests/fast/borders/borderRadiusSolid01.html -/sdcard/android/layout_tests/fast/borders/borderRadiusRidge01.html -/sdcard/android/layout_tests/fast/borders/borderRadiusOutset01.html -/sdcard/android/layout_tests/fast/borders/borderRadiusInvalidColor.html -/sdcard/android/layout_tests/fast/borders/borderRadiusInset01.html -/sdcard/android/layout_tests/fast/borders/borderRadiusGroove02.html -/sdcard/android/layout_tests/fast/borders/borderRadiusGroove01.html -/sdcard/android/layout_tests/fast/borders/borderRadiusDouble03.html -/sdcard/android/layout_tests/fast/borders/borderRadiusDouble02.html -/sdcard/android/layout_tests/fast/borders/borderRadiusDouble01.html -/sdcard/android/layout_tests/fast/borders/borderRadiusDotted03.html -/sdcard/android/layout_tests/fast/borders/borderRadiusDotted02.html -/sdcard/android/layout_tests/fast/borders/borderRadiusDotted01.html -/sdcard/android/layout_tests/fast/borders/borderRadiusDashed03.html -/sdcard/android/layout_tests/fast/borders/borderRadiusDashed02.html -/sdcard/android/layout_tests/fast/borders/borderRadiusDashed01.html -/sdcard/android/layout_tests/fast/borders/borderRadiusArcs01.html -/sdcard/android/layout_tests/fast/borders/borderRadiusAllStylesAllCorners.html -/sdcard/android/layout_tests/fast/borders/border-radius-huge-assert.html -/sdcard/android/layout_tests/fast/borders/border-image-scale-transform.html -/sdcard/android/layout_tests/fast/borders/border-image-rotate-transform.html -/sdcard/android/layout_tests/fast/borders/border-image-omit-right-slice.html -/sdcard/android/layout_tests/fast/borders/border-image-01.html -/sdcard/android/layout_tests/fast/borders/border-fit.html -/sdcard/android/layout_tests/fast/borders/border-color-inherit.html -/sdcard/android/layout_tests/fast/borders/block-mask-overlay-image.html -/sdcard/android/layout_tests/fast/body-propagation/overflow/007.html -/sdcard/android/layout_tests/fast/body-propagation/overflow/006.html -/sdcard/android/layout_tests/fast/body-propagation/overflow/005.html -/sdcard/android/layout_tests/fast/body-propagation/overflow/004.html -/sdcard/android/layout_tests/fast/body-propagation/overflow/003.html -/sdcard/android/layout_tests/fast/body-propagation/overflow/002.html -/sdcard/android/layout_tests/fast/body-propagation/overflow/001.html -/sdcard/android/layout_tests/fast/body-propagation/background-image/010.html -/sdcard/android/layout_tests/fast/body-propagation/background-image/009.html -/sdcard/android/layout_tests/fast/body-propagation/background-image/008.html -/sdcard/android/layout_tests/fast/body-propagation/background-image/007.html -/sdcard/android/layout_tests/fast/body-propagation/background-image/006.html -/sdcard/android/layout_tests/fast/body-propagation/background-image/005.html -/sdcard/android/layout_tests/fast/body-propagation/background-image/004.html -/sdcard/android/layout_tests/fast/body-propagation/background-image/003.html -/sdcard/android/layout_tests/fast/body-propagation/background-image/002.html -/sdcard/android/layout_tests/fast/body-propagation/background-image/001.html -/sdcard/android/layout_tests/fast/body-propagation/background-color/008.html -/sdcard/android/layout_tests/fast/body-propagation/background-color/007.html -/sdcard/android/layout_tests/fast/body-propagation/background-color/006.html -/sdcard/android/layout_tests/fast/body-propagation/background-color/005.html -/sdcard/android/layout_tests/fast/body-propagation/background-color/004.html -/sdcard/android/layout_tests/fast/body-propagation/background-color/003.html -/sdcard/android/layout_tests/fast/body-propagation/background-color/002.html -/sdcard/android/layout_tests/fast/body-propagation/background-color/001.html -/sdcard/android/layout_tests/fast/block/positioning/auto/007.html -/sdcard/android/layout_tests/fast/block/positioning/auto/006.html -/sdcard/android/layout_tests/fast/block/positioning/auto/005.html -/sdcard/android/layout_tests/fast/block/positioning/auto/004.html -/sdcard/android/layout_tests/fast/block/positioning/auto/003.html -/sdcard/android/layout_tests/fast/block/positioning/auto/002.html +/sdcard/android/layout_tests/fast/box-sizing/panels-two.html +/sdcard/android/layout_tests/fast/block/basic/minheight.html +/sdcard/android/layout_tests/fast/block/basic/min-pref-width-nowrap-floats.html +/sdcard/android/layout_tests/fast/block/basic/fieldset-stretch-to-legend.html +/sdcard/android/layout_tests/fast/block/basic/white-space-pre-wraps.html +/sdcard/android/layout_tests/fast/block/basic/adding-near-anonymous-block.html +/sdcard/android/layout_tests/fast/block/basic/quirk-percent-height-grandchild.html +/sdcard/android/layout_tests/fast/block/basic/001.html +/sdcard/android/layout_tests/fast/block/basic/010.html +/sdcard/android/layout_tests/fast/block/basic/quirk-height.html +/sdcard/android/layout_tests/fast/block/basic/020.html +/sdcard/android/layout_tests/fast/block/basic/002.html +/sdcard/android/layout_tests/fast/block/basic/011.html +/sdcard/android/layout_tests/fast/block/basic/text-indent-rtl.html +/sdcard/android/layout_tests/fast/block/basic/021.html +/sdcard/android/layout_tests/fast/block/basic/003.html +/sdcard/android/layout_tests/fast/block/basic/012.html +/sdcard/android/layout_tests/fast/block/basic/013.html +/sdcard/android/layout_tests/fast/block/basic/004.html +/sdcard/android/layout_tests/fast/block/basic/014.html +/sdcard/android/layout_tests/fast/block/basic/005.html +/sdcard/android/layout_tests/fast/block/basic/015.html +/sdcard/android/layout_tests/fast/block/basic/006.html +/sdcard/android/layout_tests/fast/block/basic/016.html +/sdcard/android/layout_tests/fast/block/basic/007.html +/sdcard/android/layout_tests/fast/block/basic/008.html +/sdcard/android/layout_tests/fast/block/basic/009.html +/sdcard/android/layout_tests/fast/block/basic/018.html +/sdcard/android/layout_tests/fast/block/basic/019.html /sdcard/android/layout_tests/fast/block/positioning/auto/001.html -/sdcard/android/layout_tests/fast/block/positioning/window-height-change.html -/sdcard/android/layout_tests/fast/block/positioning/replaced-inside-fixed-top-bottom.html -/sdcard/android/layout_tests/fast/block/positioning/relayout-on-position-change.html -/sdcard/android/layout_tests/fast/block/positioning/relative-overflow-replaced.html -/sdcard/android/layout_tests/fast/block/positioning/relative-overflow-replaced-float.html -/sdcard/android/layout_tests/fast/block/positioning/relative-overflow-block.html -/sdcard/android/layout_tests/fast/block/positioning/relative-overconstrained.html -/sdcard/android/layout_tests/fast/block/positioning/pref-width-change.html -/sdcard/android/layout_tests/fast/block/positioning/padding-percent.html -/sdcard/android/layout_tests/fast/block/positioning/offsetLeft-offsetTop-borders.html -/sdcard/android/layout_tests/fast/block/positioning/negative-right-pos.html -/sdcard/android/layout_tests/fast/block/positioning/move-with-auto-width.html -/sdcard/android/layout_tests/fast/block/positioning/leftmargin-topmargin.html -/sdcard/android/layout_tests/fast/block/positioning/inline-block-relposition.html -/sdcard/android/layout_tests/fast/block/positioning/height-change.html -/sdcard/android/layout_tests/fast/block/positioning/complex-percentage-height.html -/sdcard/android/layout_tests/fast/block/positioning/child-of-absolute-with-auto-height.html -/sdcard/android/layout_tests/fast/block/positioning/auto-height-with-top-and-bottom.html -/sdcard/android/layout_tests/fast/block/positioning/absolute-with-html-border-strict.html -/sdcard/android/layout_tests/fast/block/positioning/absolute-with-html-border-quirks.html -/sdcard/android/layout_tests/fast/block/positioning/absolute-positioned-overconstrained.html -/sdcard/android/layout_tests/fast/block/positioning/absolute-position-direction-strict.html -/sdcard/android/layout_tests/fast/block/positioning/absolute-position-direction-quirk.html -/sdcard/android/layout_tests/fast/block/positioning/absolute-length-of-neg-666666.html +/sdcard/android/layout_tests/fast/block/positioning/auto/002.html +/sdcard/android/layout_tests/fast/block/positioning/auto/003.html +/sdcard/android/layout_tests/fast/block/positioning/auto/004.html +/sdcard/android/layout_tests/fast/block/positioning/auto/005.html +/sdcard/android/layout_tests/fast/block/positioning/auto/006.html +/sdcard/android/layout_tests/fast/block/positioning/auto/007.html +/sdcard/android/layout_tests/fast/block/positioning/059.html /sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-short-rtl.html /sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-short-ltr.html -/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-rtl.html -/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-rtl-3.html +/sdcard/android/layout_tests/fast/block/positioning/relative-overflow-replaced-float.html +/sdcard/android/layout_tests/fast/block/positioning/absolute-positioned-overconstrained.html /sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-rtl-2.html -/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-ltr.html -/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-ltr-3.html /sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-ltr-2.html -/sdcard/android/layout_tests/fast/block/positioning/abs-inside-inline-rel.html -/sdcard/android/layout_tests/fast/block/positioning/062.html -/sdcard/android/layout_tests/fast/block/positioning/061.html +/sdcard/android/layout_tests/fast/block/positioning/020.html +/sdcard/android/layout_tests/fast/block/positioning/012.html +/sdcard/android/layout_tests/fast/block/positioning/004.html +/sdcard/android/layout_tests/fast/block/positioning/040.html +/sdcard/android/layout_tests/fast/block/positioning/absolute-position-direction-strict.html +/sdcard/android/layout_tests/fast/block/positioning/032.html +/sdcard/android/layout_tests/fast/block/positioning/024.html /sdcard/android/layout_tests/fast/block/positioning/060.html -/sdcard/android/layout_tests/fast/block/positioning/059.html -/sdcard/android/layout_tests/fast/block/positioning/058.html -/sdcard/android/layout_tests/fast/block/positioning/057.html -/sdcard/android/layout_tests/fast/block/positioning/056.html -/sdcard/android/layout_tests/fast/block/positioning/055.html -/sdcard/android/layout_tests/fast/block/positioning/054.html -/sdcard/android/layout_tests/fast/block/positioning/053.html /sdcard/android/layout_tests/fast/block/positioning/052.html -/sdcard/android/layout_tests/fast/block/positioning/051.html -/sdcard/android/layout_tests/fast/block/positioning/050.html -/sdcard/android/layout_tests/fast/block/positioning/049.html -/sdcard/android/layout_tests/fast/block/positioning/048.html -/sdcard/android/layout_tests/fast/block/positioning/047.html -/sdcard/android/layout_tests/fast/block/positioning/046.html -/sdcard/android/layout_tests/fast/block/positioning/045.html +/sdcard/android/layout_tests/fast/block/positioning/016.html /sdcard/android/layout_tests/fast/block/positioning/044.html -/sdcard/android/layout_tests/fast/block/positioning/043.html -/sdcard/android/layout_tests/fast/block/positioning/042.html -/sdcard/android/layout_tests/fast/block/positioning/041.html -/sdcard/android/layout_tests/fast/block/positioning/040.html -/sdcard/android/layout_tests/fast/block/positioning/039.html -/sdcard/android/layout_tests/fast/block/positioning/038.html -/sdcard/android/layout_tests/fast/block/positioning/037.html +/sdcard/android/layout_tests/fast/block/positioning/008.html /sdcard/android/layout_tests/fast/block/positioning/036.html -/sdcard/android/layout_tests/fast/block/positioning/035.html -/sdcard/android/layout_tests/fast/block/positioning/034.html -/sdcard/android/layout_tests/fast/block/positioning/033.html -/sdcard/android/layout_tests/fast/block/positioning/032.html -/sdcard/android/layout_tests/fast/block/positioning/031.html -/sdcard/android/layout_tests/fast/block/positioning/030.html -/sdcard/android/layout_tests/fast/block/positioning/029.html /sdcard/android/layout_tests/fast/block/positioning/028.html -/sdcard/android/layout_tests/fast/block/positioning/027.html -/sdcard/android/layout_tests/fast/block/positioning/026.html -/sdcard/android/layout_tests/fast/block/positioning/025.html -/sdcard/android/layout_tests/fast/block/positioning/024.html -/sdcard/android/layout_tests/fast/block/positioning/023.html -/sdcard/android/layout_tests/fast/block/positioning/022.html +/sdcard/android/layout_tests/fast/block/positioning/056.html +/sdcard/android/layout_tests/fast/block/positioning/048.html +/sdcard/android/layout_tests/fast/block/positioning/absolute-position-direction-quirk.html +/sdcard/android/layout_tests/fast/block/positioning/replaced-inside-fixed-top-bottom.html +/sdcard/android/layout_tests/fast/block/positioning/pref-width-change.html +/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-ltr-3.html +/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-ltr.html +/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-rtl-3.html +/sdcard/android/layout_tests/fast/block/positioning/absolute-in-inline-rtl.html +/sdcard/android/layout_tests/fast/block/positioning/001.html /sdcard/android/layout_tests/fast/block/positioning/021.html -/sdcard/android/layout_tests/fast/block/positioning/020.html -/sdcard/android/layout_tests/fast/block/positioning/019.html -/sdcard/android/layout_tests/fast/block/positioning/018.html -/sdcard/android/layout_tests/fast/block/positioning/017.html -/sdcard/android/layout_tests/fast/block/positioning/016.html -/sdcard/android/layout_tests/fast/block/positioning/015.html -/sdcard/android/layout_tests/fast/block/positioning/014.html /sdcard/android/layout_tests/fast/block/positioning/013.html -/sdcard/android/layout_tests/fast/block/positioning/012.html -/sdcard/android/layout_tests/fast/block/positioning/011.html -/sdcard/android/layout_tests/fast/block/positioning/010.html +/sdcard/android/layout_tests/fast/block/positioning/relative-overflow-block.html +/sdcard/android/layout_tests/fast/block/positioning/005.html +/sdcard/android/layout_tests/fast/block/positioning/041.html +/sdcard/android/layout_tests/fast/block/positioning/033.html +/sdcard/android/layout_tests/fast/block/positioning/025.html +/sdcard/android/layout_tests/fast/block/positioning/061.html +/sdcard/android/layout_tests/fast/block/positioning/017.html +/sdcard/android/layout_tests/fast/block/positioning/053.html /sdcard/android/layout_tests/fast/block/positioning/009.html -/sdcard/android/layout_tests/fast/block/positioning/008.html -/sdcard/android/layout_tests/fast/block/positioning/007.html +/sdcard/android/layout_tests/fast/block/positioning/045.html +/sdcard/android/layout_tests/fast/block/positioning/037.html +/sdcard/android/layout_tests/fast/block/positioning/029.html +/sdcard/android/layout_tests/fast/block/positioning/057.html +/sdcard/android/layout_tests/fast/block/positioning/049.html +/sdcard/android/layout_tests/fast/block/positioning/absolute-with-html-border-quirks.html +/sdcard/android/layout_tests/fast/block/positioning/leftmargin-topmargin.html +/sdcard/android/layout_tests/fast/block/positioning/absolute-length-of-neg-666666.html +/sdcard/android/layout_tests/fast/block/positioning/complex-percentage-height.html +/sdcard/android/layout_tests/fast/block/positioning/auto-height-with-top-and-bottom.html +/sdcard/android/layout_tests/fast/block/positioning/010.html +/sdcard/android/layout_tests/fast/block/positioning/002.html +/sdcard/android/layout_tests/fast/block/positioning/030.html +/sdcard/android/layout_tests/fast/block/positioning/relayout-on-position-change.html +/sdcard/android/layout_tests/fast/block/positioning/022.html +/sdcard/android/layout_tests/fast/block/positioning/padding-percent.html +/sdcard/android/layout_tests/fast/block/positioning/014.html +/sdcard/android/layout_tests/fast/block/positioning/050.html /sdcard/android/layout_tests/fast/block/positioning/006.html -/sdcard/android/layout_tests/fast/block/positioning/005.html -/sdcard/android/layout_tests/fast/block/positioning/004.html +/sdcard/android/layout_tests/fast/block/positioning/042.html +/sdcard/android/layout_tests/fast/block/positioning/034.html +/sdcard/android/layout_tests/fast/block/positioning/offsetLeft-offsetTop-borders.html +/sdcard/android/layout_tests/fast/block/positioning/062.html +/sdcard/android/layout_tests/fast/block/positioning/026.html +/sdcard/android/layout_tests/fast/block/positioning/054.html +/sdcard/android/layout_tests/fast/block/positioning/018.html +/sdcard/android/layout_tests/fast/block/positioning/046.html +/sdcard/android/layout_tests/fast/block/positioning/abs-inside-inline-rel.html +/sdcard/android/layout_tests/fast/block/positioning/038.html +/sdcard/android/layout_tests/fast/block/positioning/absolute-with-html-border-strict.html +/sdcard/android/layout_tests/fast/block/positioning/058.html +/sdcard/android/layout_tests/fast/block/positioning/negative-right-pos.html +/sdcard/android/layout_tests/fast/block/positioning/relative-overconstrained.html +/sdcard/android/layout_tests/fast/block/positioning/child-of-absolute-with-auto-height.html +/sdcard/android/layout_tests/fast/block/positioning/relative-overflow-replaced.html +/sdcard/android/layout_tests/fast/block/positioning/height-change.html +/sdcard/android/layout_tests/fast/block/positioning/window-height-change.html +/sdcard/android/layout_tests/fast/block/positioning/011.html /sdcard/android/layout_tests/fast/block/positioning/003.html -/sdcard/android/layout_tests/fast/block/positioning/002.html -/sdcard/android/layout_tests/fast/block/positioning/001.html -/sdcard/android/layout_tests/fast/block/margin-collapse/negative-margins.html -/sdcard/android/layout_tests/fast/block/margin-collapse/empty-clear-blocks.html -/sdcard/android/layout_tests/fast/block/margin-collapse/104.html -/sdcard/android/layout_tests/fast/block/margin-collapse/103.html -/sdcard/android/layout_tests/fast/block/margin-collapse/102.html -/sdcard/android/layout_tests/fast/block/margin-collapse/101.html -/sdcard/android/layout_tests/fast/block/margin-collapse/100.html -/sdcard/android/layout_tests/fast/block/margin-collapse/063.html -/sdcard/android/layout_tests/fast/block/margin-collapse/062.html -/sdcard/android/layout_tests/fast/block/margin-collapse/059.html -/sdcard/android/layout_tests/fast/block/margin-collapse/058.html -/sdcard/android/layout_tests/fast/block/margin-collapse/057.html -/sdcard/android/layout_tests/fast/block/margin-collapse/056.html -/sdcard/android/layout_tests/fast/block/margin-collapse/055.html -/sdcard/android/layout_tests/fast/block/margin-collapse/045.html -/sdcard/android/layout_tests/fast/block/margin-collapse/044.html -/sdcard/android/layout_tests/fast/block/margin-collapse/043.html -/sdcard/android/layout_tests/fast/block/margin-collapse/042.html -/sdcard/android/layout_tests/fast/block/margin-collapse/041.html -/sdcard/android/layout_tests/fast/block/margin-collapse/040.html -/sdcard/android/layout_tests/fast/block/margin-collapse/039.html -/sdcard/android/layout_tests/fast/block/margin-collapse/038.html -/sdcard/android/layout_tests/fast/block/margin-collapse/037.html -/sdcard/android/layout_tests/fast/block/margin-collapse/035.html -/sdcard/android/layout_tests/fast/block/margin-collapse/034.html -/sdcard/android/layout_tests/fast/block/margin-collapse/033.html -/sdcard/android/layout_tests/fast/block/margin-collapse/032.html -/sdcard/android/layout_tests/fast/block/margin-collapse/031.html -/sdcard/android/layout_tests/fast/block/margin-collapse/030.html -/sdcard/android/layout_tests/fast/block/margin-collapse/029.html -/sdcard/android/layout_tests/fast/block/margin-collapse/028.html -/sdcard/android/layout_tests/fast/block/margin-collapse/027.html -/sdcard/android/layout_tests/fast/block/margin-collapse/026.html -/sdcard/android/layout_tests/fast/block/margin-collapse/025.html -/sdcard/android/layout_tests/fast/block/margin-collapse/022.html -/sdcard/android/layout_tests/fast/block/margin-collapse/021.html -/sdcard/android/layout_tests/fast/block/margin-collapse/020.html -/sdcard/android/layout_tests/fast/block/margin-collapse/019.html -/sdcard/android/layout_tests/fast/block/margin-collapse/018.html -/sdcard/android/layout_tests/fast/block/margin-collapse/017.html -/sdcard/android/layout_tests/fast/block/margin-collapse/016.html -/sdcard/android/layout_tests/fast/block/margin-collapse/015.html -/sdcard/android/layout_tests/fast/block/margin-collapse/012.html -/sdcard/android/layout_tests/fast/block/margin-collapse/011.html -/sdcard/android/layout_tests/fast/block/margin-collapse/010.html -/sdcard/android/layout_tests/fast/block/margin-collapse/006.html -/sdcard/android/layout_tests/fast/block/margin-collapse/005.html -/sdcard/android/layout_tests/fast/block/margin-collapse/004.html -/sdcard/android/layout_tests/fast/block/margin-collapse/003.html -/sdcard/android/layout_tests/fast/block/margin-collapse/002.html -/sdcard/android/layout_tests/fast/block/margin-collapse/001.html -/sdcard/android/layout_tests/fast/block/float/width-update-after-clear.html +/sdcard/android/layout_tests/fast/block/positioning/move-with-auto-width.html +/sdcard/android/layout_tests/fast/block/positioning/031.html +/sdcard/android/layout_tests/fast/block/positioning/023.html +/sdcard/android/layout_tests/fast/block/positioning/051.html +/sdcard/android/layout_tests/fast/block/positioning/015.html +/sdcard/android/layout_tests/fast/block/positioning/043.html +/sdcard/android/layout_tests/fast/block/positioning/007.html +/sdcard/android/layout_tests/fast/block/positioning/035.html +/sdcard/android/layout_tests/fast/block/positioning/027.html +/sdcard/android/layout_tests/fast/block/positioning/055.html +/sdcard/android/layout_tests/fast/block/positioning/019.html +/sdcard/android/layout_tests/fast/block/positioning/047.html +/sdcard/android/layout_tests/fast/block/positioning/039.html +/sdcard/android/layout_tests/fast/block/positioning/inline-block-relposition.html /sdcard/android/layout_tests/fast/block/float/vertical-move-relayout.html /sdcard/android/layout_tests/fast/block/float/tableshifting.html /sdcard/android/layout_tests/fast/block/float/table-relayout.html +/sdcard/android/layout_tests/fast/block/float/br-with-clear-2.html +/sdcard/android/layout_tests/fast/block/float/020.html +/sdcard/android/layout_tests/fast/block/float/012.html +/sdcard/android/layout_tests/fast/block/float/004.html +/sdcard/android/layout_tests/fast/block/float/032.html +/sdcard/android/layout_tests/fast/block/float/024.html +/sdcard/android/layout_tests/fast/block/float/016.html +/sdcard/android/layout_tests/fast/block/float/008.html +/sdcard/android/layout_tests/fast/block/float/028.html /sdcard/android/layout_tests/fast/block/float/shrink-to-fit-width.html -/sdcard/android/layout_tests/fast/block/float/relative-painted-twice.html -/sdcard/android/layout_tests/fast/block/float/overhanging-after-height-decrease.html -/sdcard/android/layout_tests/fast/block/float/overhanging-after-height-decrease-offsets.html +/sdcard/android/layout_tests/fast/block/float/clamped-right-float.html +/sdcard/android/layout_tests/fast/block/float/independent-align-positioning.html +/sdcard/android/layout_tests/fast/block/float/float-on-zero-height-line.html /sdcard/android/layout_tests/fast/block/float/nowrap-clear-min-width.html +/sdcard/android/layout_tests/fast/block/float/overhanging-after-height-decrease-offsets.html +/sdcard/android/layout_tests/fast/block/float/001.html +/sdcard/android/layout_tests/fast/block/float/021.html +/sdcard/android/layout_tests/fast/block/float/013.html /sdcard/android/layout_tests/fast/block/float/nopaint-after-layer-destruction2.html -/sdcard/android/layout_tests/fast/block/float/nopaint-after-layer-destruction.html -/sdcard/android/layout_tests/fast/block/float/nestedAnonymousBlocks2.html +/sdcard/android/layout_tests/fast/block/float/005.html +/sdcard/android/layout_tests/fast/block/float/033.html +/sdcard/android/layout_tests/fast/block/float/025.html +/sdcard/android/layout_tests/fast/block/float/017.html +/sdcard/android/layout_tests/fast/block/float/009.html +/sdcard/android/layout_tests/fast/block/float/float-in-float-hit-testing.html +/sdcard/android/layout_tests/fast/block/float/029.html +/sdcard/android/layout_tests/fast/block/float/4145535Crash.html +/sdcard/android/layout_tests/fast/block/float/editable-text-overlapping-float.html /sdcard/android/layout_tests/fast/block/float/nestedAnonymousBlocks.html -/sdcard/android/layout_tests/fast/block/float/negative-margin-clear.html -/sdcard/android/layout_tests/fast/block/float/narrow-after-wide.html -/sdcard/android/layout_tests/fast/block/float/multiple-float-positioning.html -/sdcard/android/layout_tests/fast/block/float/marquee-shrink-to-avoid-floats.html /sdcard/android/layout_tests/fast/block/float/intruding-painted-twice.html -/sdcard/android/layout_tests/fast/block/float/independent-align-positioning.html -/sdcard/android/layout_tests/fast/block/float/float-on-zero-height-line.html +/sdcard/android/layout_tests/fast/block/float/010.html +/sdcard/android/layout_tests/fast/block/float/002.html +/sdcard/android/layout_tests/fast/block/float/dynamic-unfloat-pref-width.html +/sdcard/android/layout_tests/fast/block/float/marquee-shrink-to-avoid-floats.html +/sdcard/android/layout_tests/fast/block/float/030.html +/sdcard/android/layout_tests/fast/block/float/022.html +/sdcard/android/layout_tests/fast/block/float/014.html +/sdcard/android/layout_tests/fast/block/float/006.html +/sdcard/android/layout_tests/fast/block/float/034.html +/sdcard/android/layout_tests/fast/block/float/relative-painted-twice.html +/sdcard/android/layout_tests/fast/block/float/026.html +/sdcard/android/layout_tests/fast/block/float/018.html +/sdcard/android/layout_tests/fast/block/float/width-update-after-clear.html +/sdcard/android/layout_tests/fast/block/float/nopaint-after-layer-destruction.html /sdcard/android/layout_tests/fast/block/float/float-in-float-painting.html -/sdcard/android/layout_tests/fast/block/float/float-in-float-hit-testing.html +/sdcard/android/layout_tests/fast/block/float/overhanging-after-height-decrease.html /sdcard/android/layout_tests/fast/block/float/float-avoidance.html -/sdcard/android/layout_tests/fast/block/float/editable-text-overlapping-float.html -/sdcard/android/layout_tests/fast/block/float/dynamic-unfloat-pref-width.html -/sdcard/android/layout_tests/fast/block/float/clamped-right-float.html +/sdcard/android/layout_tests/fast/block/float/narrow-after-wide.html +/sdcard/android/layout_tests/fast/block/float/multiple-float-positioning.html /sdcard/android/layout_tests/fast/block/float/br-with-clear.html -/sdcard/android/layout_tests/fast/block/float/br-with-clear-2.html -/sdcard/android/layout_tests/fast/block/float/4145535Crash.html -/sdcard/android/layout_tests/fast/block/float/035.html -/sdcard/android/layout_tests/fast/block/float/034.html -/sdcard/android/layout_tests/fast/block/float/033.html -/sdcard/android/layout_tests/fast/block/float/032.html +/sdcard/android/layout_tests/fast/block/float/011.html +/sdcard/android/layout_tests/fast/block/float/negative-margin-clear.html +/sdcard/android/layout_tests/fast/block/float/003.html /sdcard/android/layout_tests/fast/block/float/031.html -/sdcard/android/layout_tests/fast/block/float/030.html -/sdcard/android/layout_tests/fast/block/float/029.html -/sdcard/android/layout_tests/fast/block/float/028.html -/sdcard/android/layout_tests/fast/block/float/027.html -/sdcard/android/layout_tests/fast/block/float/026.html -/sdcard/android/layout_tests/fast/block/float/025.html -/sdcard/android/layout_tests/fast/block/float/024.html /sdcard/android/layout_tests/fast/block/float/023.html -/sdcard/android/layout_tests/fast/block/float/022.html -/sdcard/android/layout_tests/fast/block/float/021.html -/sdcard/android/layout_tests/fast/block/float/020.html -/sdcard/android/layout_tests/fast/block/float/019.html -/sdcard/android/layout_tests/fast/block/float/018.html -/sdcard/android/layout_tests/fast/block/float/017.html -/sdcard/android/layout_tests/fast/block/float/016.html /sdcard/android/layout_tests/fast/block/float/015.html -/sdcard/android/layout_tests/fast/block/float/014.html -/sdcard/android/layout_tests/fast/block/float/013.html -/sdcard/android/layout_tests/fast/block/float/012.html -/sdcard/android/layout_tests/fast/block/float/011.html -/sdcard/android/layout_tests/fast/block/float/010.html -/sdcard/android/layout_tests/fast/block/float/009.html -/sdcard/android/layout_tests/fast/block/float/008.html /sdcard/android/layout_tests/fast/block/float/007.html -/sdcard/android/layout_tests/fast/block/float/006.html -/sdcard/android/layout_tests/fast/block/float/005.html -/sdcard/android/layout_tests/fast/block/float/004.html -/sdcard/android/layout_tests/fast/block/float/003.html -/sdcard/android/layout_tests/fast/block/float/002.html -/sdcard/android/layout_tests/fast/block/float/001.html -/sdcard/android/layout_tests/fast/block/basic/white-space-pre-wraps.html -/sdcard/android/layout_tests/fast/block/basic/text-indent-rtl.html -/sdcard/android/layout_tests/fast/block/basic/quirk-percent-height-grandchild.html -/sdcard/android/layout_tests/fast/block/basic/quirk-height.html -/sdcard/android/layout_tests/fast/block/basic/minheight.html -/sdcard/android/layout_tests/fast/block/basic/min-pref-width-nowrap-floats.html -/sdcard/android/layout_tests/fast/block/basic/fieldset-stretch-to-legend.html -/sdcard/android/layout_tests/fast/block/basic/adding-near-anonymous-block.html -/sdcard/android/layout_tests/fast/block/basic/021.html -/sdcard/android/layout_tests/fast/block/basic/020.html -/sdcard/android/layout_tests/fast/block/basic/019.html -/sdcard/android/layout_tests/fast/block/basic/018.html -/sdcard/android/layout_tests/fast/block/basic/016.html -/sdcard/android/layout_tests/fast/block/basic/015.html -/sdcard/android/layout_tests/fast/block/basic/014.html -/sdcard/android/layout_tests/fast/block/basic/013.html -/sdcard/android/layout_tests/fast/block/basic/012.html -/sdcard/android/layout_tests/fast/block/basic/011.html -/sdcard/android/layout_tests/fast/block/basic/010.html -/sdcard/android/layout_tests/fast/block/basic/009.html -/sdcard/android/layout_tests/fast/block/basic/008.html -/sdcard/android/layout_tests/fast/block/basic/007.html -/sdcard/android/layout_tests/fast/block/basic/006.html -/sdcard/android/layout_tests/fast/block/basic/005.html -/sdcard/android/layout_tests/fast/block/basic/004.html -/sdcard/android/layout_tests/fast/block/basic/003.html -/sdcard/android/layout_tests/fast/block/basic/002.html -/sdcard/android/layout_tests/fast/block/basic/001.html +/sdcard/android/layout_tests/fast/block/float/035.html +/sdcard/android/layout_tests/fast/block/float/027.html +/sdcard/android/layout_tests/fast/block/float/019.html +/sdcard/android/layout_tests/fast/block/float/nestedAnonymousBlocks2.html +/sdcard/android/layout_tests/fast/block/margin-collapse/059.html +/sdcard/android/layout_tests/fast/block/margin-collapse/empty-clear-blocks.html +/sdcard/android/layout_tests/fast/block/margin-collapse/010.html +/sdcard/android/layout_tests/fast/block/margin-collapse/negative-margins.html +/sdcard/android/layout_tests/fast/block/margin-collapse/002.html +/sdcard/android/layout_tests/fast/block/margin-collapse/020.html +/sdcard/android/layout_tests/fast/block/margin-collapse/101.html +/sdcard/android/layout_tests/fast/block/margin-collapse/030.html +/sdcard/android/layout_tests/fast/block/margin-collapse/012.html +/sdcard/android/layout_tests/fast/block/margin-collapse/040.html +/sdcard/android/layout_tests/fast/block/margin-collapse/022.html +/sdcard/android/layout_tests/fast/block/margin-collapse/004.html +/sdcard/android/layout_tests/fast/block/margin-collapse/103.html +/sdcard/android/layout_tests/fast/block/margin-collapse/032.html +/sdcard/android/layout_tests/fast/block/margin-collapse/006.html +/sdcard/android/layout_tests/fast/block/margin-collapse/042.html +/sdcard/android/layout_tests/fast/block/margin-collapse/016.html +/sdcard/android/layout_tests/fast/block/margin-collapse/034.html +/sdcard/android/layout_tests/fast/block/margin-collapse/062.html +/sdcard/android/layout_tests/fast/block/margin-collapse/044.html +/sdcard/android/layout_tests/fast/block/margin-collapse/026.html +/sdcard/android/layout_tests/fast/block/margin-collapse/018.html +/sdcard/android/layout_tests/fast/block/margin-collapse/028.html +/sdcard/android/layout_tests/fast/block/margin-collapse/056.html +/sdcard/android/layout_tests/fast/block/margin-collapse/038.html +/sdcard/android/layout_tests/fast/block/margin-collapse/058.html +/sdcard/android/layout_tests/fast/block/margin-collapse/100.html +/sdcard/android/layout_tests/fast/block/margin-collapse/001.html +/sdcard/android/layout_tests/fast/block/margin-collapse/011.html +/sdcard/android/layout_tests/fast/block/margin-collapse/102.html +/sdcard/android/layout_tests/fast/block/margin-collapse/021.html +/sdcard/android/layout_tests/fast/block/margin-collapse/003.html +/sdcard/android/layout_tests/fast/block/margin-collapse/031.html +/sdcard/android/layout_tests/fast/block/margin-collapse/005.html +/sdcard/android/layout_tests/fast/block/margin-collapse/041.html +/sdcard/android/layout_tests/fast/block/margin-collapse/104.html +/sdcard/android/layout_tests/fast/block/margin-collapse/033.html +/sdcard/android/layout_tests/fast/block/margin-collapse/015.html +/sdcard/android/layout_tests/fast/block/margin-collapse/025.html +/sdcard/android/layout_tests/fast/block/margin-collapse/043.html +/sdcard/android/layout_tests/fast/block/margin-collapse/035.html +/sdcard/android/layout_tests/fast/block/margin-collapse/017.html +/sdcard/android/layout_tests/fast/block/margin-collapse/027.html +/sdcard/android/layout_tests/fast/block/margin-collapse/045.html +/sdcard/android/layout_tests/fast/block/margin-collapse/063.html +/sdcard/android/layout_tests/fast/block/margin-collapse/037.html +/sdcard/android/layout_tests/fast/block/margin-collapse/019.html +/sdcard/android/layout_tests/fast/block/margin-collapse/055.html +/sdcard/android/layout_tests/fast/block/margin-collapse/029.html +/sdcard/android/layout_tests/fast/block/margin-collapse/039.html +/sdcard/android/layout_tests/fast/block/margin-collapse/057.html +/sdcard/android/layout_tests/fast/runin/001.html +/sdcard/android/layout_tests/fast/runin/002.html +/sdcard/android/layout_tests/fast/parser/title-error-test.html +/sdcard/android/layout_tests/fast/parser/comments.html +/sdcard/android/layout_tests/fast/parser/fonts.html +/sdcard/android/layout_tests/fast/parser/comment-in-style.html +/sdcard/android/layout_tests/fast/parser/comment-in-script.html +/sdcard/android/layout_tests/fast/parser/broken-comments-vs-parsing-mode.html +/sdcard/android/layout_tests/fast/parser/entity-comment-in-style.html +/sdcard/android/layout_tests/fast/parser/xhtml-alternate-entities.xml +/sdcard/android/layout_tests/fast/parser/nofoo-tags-inside-paragraph.html +/sdcard/android/layout_tests/fast/parser/entity-comment-in-textarea.html +/sdcard/android/layout_tests/fast/parser/bad-xml-slash.html +/sdcard/android/layout_tests/fast/parser/001.html +/sdcard/android/layout_tests/fast/parser/open-comment-in-textarea.html +/sdcard/android/layout_tests/fast/parser/tabs-in-scripts.html +/sdcard/android/layout_tests/fast/parser/external-entities-in-xslt.xml : has expected results +/sdcard/android/layout_tests/fast/parser/parseCommentsInTitles.html +/sdcard/android/layout_tests/fast/parser/remove-block-in-residual-style.html +/sdcard/android/layout_tests/fast/parser/open-comment-in-style.html +/sdcard/android/layout_tests/fast/parser/document-write-option.html +/sdcard/android/layout_tests/fast/parser/style-script-head-test.html +/sdcard/android/layout_tests/fast/parser/comment-in-textarea.html +/sdcard/android/layout_tests/fast/layers/zindex-ridonkulous.html +/sdcard/android/layout_tests/fast/layers/positioned-inside-root-with-margins.html +/sdcard/android/layout_tests/fast/layers/layer-visibility-sublayer.html +/sdcard/android/layout_tests/fast/layers/opacity-outline.html +/sdcard/android/layout_tests/fast/layers/add-layer-with-nested-stacking.html +/sdcard/android/layout_tests/fast/layers/layer-content-visibility-change.html +/sdcard/android/layout_tests/fast/layers/zindex-inherit.html +/sdcard/android/layout_tests/fast/layers/layer-visibility.html +/sdcard/android/layout_tests/fast/layers/remove-layer-with-nested-stacking.html +/sdcard/android/layout_tests/fast/layers/opacity-transforms.html +/sdcard/android/layout_tests/fast/layers/overflow-scroll-auto-switch.html +/sdcard/android/layout_tests/fast/layers/scroll-rect-to-visible.html +/sdcard/android/layout_tests/fast/layers/opacity-stacking.html +/sdcard/android/layout_tests/fast/history/clicked-link-is-visited.html +/sdcard/android/layout_tests/fast/history/history_reload.html : has expected results +/sdcard/android/layout_tests/fast/backgrounds/repeat/mask-negative-offset-repeat.html +/sdcard/android/layout_tests/fast/backgrounds/repeat/negative-offset-repeat.html +/sdcard/android/layout_tests/fast/backgrounds/repeat/negative-offset-repeat-transformed.html +/sdcard/android/layout_tests/fast/backgrounds/repeat/noRepeatCorrectClip.html +/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize02.html +/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize11.html +/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize03.html +/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize12.html +/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize04.html +/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize13.html /sdcard/android/layout_tests/fast/backgrounds/size/zero.html -/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize19.html -/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize18.html -/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize17.html -/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize16.html -/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize15.html +/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize05.html /sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize14.html -/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize13.html -/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize12.html -/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize11.html -/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize10.html -/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize09.html -/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize08.html -/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize07.html /sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize06.html -/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize05.html -/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize04.html -/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize03.html -/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize02.html +/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize15.html +/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize07.html +/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize16.html +/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize17.html +/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize08.html +/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize09.html +/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize18.html +/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize19.html +/sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize10.html /sdcard/android/layout_tests/fast/backgrounds/size/backgroundSize01.html -/sdcard/android/layout_tests/fast/backgrounds/repeat/noRepeatCorrectClip.html -/sdcard/android/layout_tests/fast/backgrounds/repeat/negative-offset-repeat.html -/sdcard/android/layout_tests/fast/backgrounds/repeat/negative-offset-repeat-transformed.html -/sdcard/android/layout_tests/fast/backgrounds/repeat/mask-negative-offset-repeat.html -/sdcard/android/layout_tests/fast/backgrounds/svg-as-mask.html -/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-6.html -/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-5.html -/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-4.html -/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-3.html /sdcard/android/layout_tests/fast/backgrounds/svg-as-background-2.html -/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-1.html +/sdcard/android/layout_tests/fast/backgrounds/background-origin-root-element.html +/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-3.html +/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-4.html +/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-5.html +/sdcard/android/layout_tests/fast/backgrounds/background-position-1.html +/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-6.html +/sdcard/android/layout_tests/fast/backgrounds/opacity-on-document-element.html +/sdcard/android/layout_tests/fast/backgrounds/svg-as-mask.html /sdcard/android/layout_tests/fast/backgrounds/solid-color-context-restore.html /sdcard/android/layout_tests/fast/backgrounds/mask-composite.html -/sdcard/android/layout_tests/fast/backgrounds/bgCompositeCopy.html +/sdcard/android/layout_tests/fast/backgrounds/animated-svg-as-background.html +/sdcard/android/layout_tests/fast/backgrounds/001.html +/sdcard/android/layout_tests/fast/backgrounds/animated-gif-as-background.html /sdcard/android/layout_tests/fast/backgrounds/background-position-rounding.html -/sdcard/android/layout_tests/fast/backgrounds/background-position-1.html -/sdcard/android/layout_tests/fast/backgrounds/background-origin-root-element.html +/sdcard/android/layout_tests/fast/backgrounds/bgCompositeCopy.html /sdcard/android/layout_tests/fast/backgrounds/background-inherit-color-bug.html -/sdcard/android/layout_tests/fast/backgrounds/001.html +/sdcard/android/layout_tests/fast/backgrounds/animated-svg-as-mask.html +/sdcard/android/layout_tests/fast/backgrounds/svg-as-background-1.html +/sdcard/android/layout_tests/fast/repaint/reflection-redraw.html +/sdcard/android/layout_tests/fast/repaint/layer-full-repaint.html +/sdcard/android/layout_tests/fast/repaint/subtree-root-clip.html +/sdcard/android/layout_tests/fast/repaint/subtree-root-clip-3.html +/sdcard/android/layout_tests/fast/repaint/layer-outline-horizontal.html +/sdcard/android/layout_tests/fast/repaint/layer-hide-when-needs-layout.html +/sdcard/android/layout_tests/fast/repaint/layer-outline.html +/sdcard/android/layout_tests/fast/repaint/list-marker-2.html +/sdcard/android/layout_tests/fast/repaint/table-section-overflow.html +/sdcard/android/layout_tests/fast/repaint/body-background-image.html +/sdcard/android/layout_tests/fast/repaint/shadow-multiple-strict-vertical.html +/sdcard/android/layout_tests/fast/repaint/inline-outline-repaint.html +/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-4.html +/sdcard/android/layout_tests/fast/repaint/change-transform.html +/sdcard/android/layout_tests/fast/repaint/fixed.html +/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-8.html +/sdcard/android/layout_tests/fast/repaint/erase-overflow.html +/sdcard/android/layout_tests/fast/repaint/outline-child-repaint.html +/sdcard/android/layout_tests/fast/repaint/float-overflow.html +/sdcard/android/layout_tests/fast/repaint/containing-block-position-change.html +/sdcard/android/layout_tests/fast/repaint/text-selection-rect-in-overflow.html +/sdcard/android/layout_tests/fast/repaint/flexible-box-overflow-horizontal.html +/sdcard/android/layout_tests/fast/repaint/table-cell-move.html +/sdcard/android/layout_tests/fast/repaint/transform-absolute-child.html +/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-10.html +/sdcard/android/layout_tests/fast/repaint/float-move-during-layout.html +/sdcard/android/layout_tests/fast/repaint/overflow-clip-subtree-layout.html +/sdcard/android/layout_tests/fast/repaint/invisible-objects.html +/sdcard/android/layout_tests/fast/repaint/shadow-multiple-strict-horizontal.html +/sdcard/android/layout_tests/fast/repaint/focus-layers.html +/sdcard/android/layout_tests/fast/repaint/inline-color-change.html +/sdcard/android/layout_tests/fast/repaint/table-col-background.html +/sdcard/android/layout_tests/fast/repaint/selection-after-remove.html +/sdcard/android/layout_tests/fast/repaint/dynamic-table-vertical-alignment-change.html +/sdcard/android/layout_tests/fast/repaint/flexible-box-overflow.html +/sdcard/android/layout_tests/fast/repaint/table-two-pass-layout-overpaint.html +/sdcard/android/layout_tests/fast/repaint/overflow-into-content.html +/sdcard/android/layout_tests/fast/repaint/shadow-multiple-vertical.html +/sdcard/android/layout_tests/fast/repaint/border-repaint-glitch.html +/sdcard/android/layout_tests/fast/repaint/continuation-after-outline.html +/sdcard/android/layout_tests/fast/repaint/intermediate-layout-position.html +/sdcard/android/layout_tests/fast/repaint/table-section-repaint.html +/sdcard/android/layout_tests/fast/repaint/clipped-relative.html +/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-1.html +/sdcard/android/layout_tests/fast/repaint/backgroundSizeRepaint.html +/sdcard/android/layout_tests/fast/repaint/box-shadow-dynamic.html +/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-5.html +/sdcard/android/layout_tests/fast/repaint/text-shadow-horizontal.html +/sdcard/android/layout_tests/fast/repaint/caret-outside-block.html +/sdcard/android/layout_tests/fast/repaint/renderer-destruction-by-invalidateSelection-crash.html +/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-9.html +/sdcard/android/layout_tests/fast/repaint/transform-repaint-descendants.html +/sdcard/android/layout_tests/fast/repaint/layout-state-relative.html +/sdcard/android/layout_tests/fast/repaint/shadow-multiple-horizontal.html +/sdcard/android/layout_tests/fast/repaint/border-fit-lines.html +/sdcard/android/layout_tests/fast/repaint/repaint-resized-overflow.html +/sdcard/android/layout_tests/fast/repaint/bugzilla-3509.html +/sdcard/android/layout_tests/fast/repaint/inline-block-overflow.html +/sdcard/android/layout_tests/fast/repaint/button-spurious-layout-hint.html +/sdcard/android/layout_tests/fast/repaint/bugzilla-6278.html +/sdcard/android/layout_tests/fast/repaint/box-shadow-v.html +/sdcard/android/layout_tests/fast/repaint/delete-into-nested-block.html +/sdcard/android/layout_tests/fast/repaint/float-overflow-right.html +/sdcard/android/layout_tests/fast/repaint/table-cell-collapsed-border.html +/sdcard/android/layout_tests/fast/repaint/selection-after-delete.html +/sdcard/android/layout_tests/fast/repaint/lines-with-layout-delta.html +/sdcard/android/layout_tests/fast/repaint/layout-state-only-positioned.html +/sdcard/android/layout_tests/fast/repaint/table-extra-bottom-grow.html +/sdcard/android/layout_tests/fast/repaint/transform-relative-position.html +/sdcard/android/layout_tests/fast/repaint/selection-gap-overflow-scroll.html +/sdcard/android/layout_tests/fast/repaint/subtree-root-skipped.html +/sdcard/android/layout_tests/fast/repaint/line-overflow.html +/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-2.html +/sdcard/android/layout_tests/fast/repaint/table-row.html +/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-6.html +/sdcard/android/layout_tests/fast/repaint/table-outer-border.html +/sdcard/android/layout_tests/fast/repaint/overflow-scroll-delete.html +/sdcard/android/layout_tests/fast/repaint/layer-visibility.html +/sdcard/android/layout_tests/fast/repaint/border-radius-repaint.html +/sdcard/android/layout_tests/fast/repaint/table-collapsed-border.html +/sdcard/android/layout_tests/fast/repaint/transform-translate.html +/sdcard/android/layout_tests/fast/repaint/bugzilla-7235.html +/sdcard/android/layout_tests/fast/repaint/4776765.html +/sdcard/android/layout_tests/fast/repaint/bugzilla-6473.html +/sdcard/android/layout_tests/fast/repaint/intermediate-layout-position-clip.html +/sdcard/android/layout_tests/fast/repaint/focus-ring.html +/sdcard/android/layout_tests/fast/repaint/table-cell-vertical-overflow.html +/sdcard/android/layout_tests/fast/repaint/create-layer-repaint.html +/sdcard/android/layout_tests/fast/repaint/subtree-root-clip-2.html +/sdcard/android/layout_tests/fast/repaint/bugzilla-6388.html +/sdcard/android/layout_tests/fast/repaint/overflow-outline-repaint.html +/sdcard/android/layout_tests/fast/repaint/content-into-overflow.html +/sdcard/android/layout_tests/fast/repaint/static-to-positioned.html +/sdcard/android/layout_tests/fast/repaint/bugzilla-5699.html +/sdcard/android/layout_tests/fast/repaint/transform-absolute-in-positioned-container.html +/sdcard/android/layout_tests/fast/repaint/outline-repaint-glitch.html +/sdcard/android/layout_tests/fast/repaint/overflow-delete-line.html +/sdcard/android/layout_tests/fast/repaint/transform-disable-layoutstate.html +/sdcard/android/layout_tests/fast/repaint/list-marker.html +/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-3.html +/sdcard/android/layout_tests/fast/repaint/line-flow-with-floats-7.html +/sdcard/android/layout_tests/fast/repaint/outline-inset.html +/sdcard/android/layout_tests/fast/repaint/box-shadow-h.html +/sdcard/android/layout_tests/fast/repaint/4774354.html +/sdcard/android/layout_tests/fast/repaint/clip-with-layout-delta.html +/sdcard/android/layout_tests/fast/repaint/control-clip.html +/sdcard/android/layout_tests/fast/repaint/selected-replaced.html +/sdcard/android/layout_tests/fast/repaint/text-selection-rect-in-overflow-2.html +/sdcard/android/layout_tests/fast/repaint/make-children-non-inline.html +/sdcard/android/layout_tests/fast/repaint/text-shadow.html +/sdcard/android/layout_tests/fast/repaint/outline-shrinking.html +/sdcard/android/layout_tests/fast/repaint/layer-child-outline.html +/sdcard/android/layout_tests/fast/loader/start-load-in-unload.html +/sdcard/android/layout_tests/fast/loader/text-document-wrapping.html +/sdcard/android/layout_tests/fast/canvas/fillrect-gradient-zero-stops.html +/sdcard/android/layout_tests/fast/canvas/canvas-transforms-during-path.html +/sdcard/android/layout_tests/fast/canvas/drawImage.html +/sdcard/android/layout_tests/fast/canvas/shadow-offset-7.html +/sdcard/android/layout_tests/fast/canvas/canvas-transform-non-invertible.html : has expected results +/sdcard/android/layout_tests/fast/canvas/shadow-offset-4.html +/sdcard/android/layout_tests/fast/canvas/canvas-transform-infinity.html : has expected results +/sdcard/android/layout_tests/fast/canvas/canvas-text-baseline.html +/sdcard/android/layout_tests/fast/canvas/canvas-as-image-incremental-repaint.html +/sdcard/android/layout_tests/fast/canvas/shadow-offset-1.html +/sdcard/android/layout_tests/fast/canvas/canvas-size-change-after-layout.html +/sdcard/android/layout_tests/fast/canvas/canvas-resize-reset.html +/sdcard/android/layout_tests/fast/canvas/canvas-bg.html +/sdcard/android/layout_tests/fast/canvas/canvas-transform-skewed.html : has expected results +/sdcard/android/layout_tests/fast/canvas/zero-size-fill-rect.html +/sdcard/android/layout_tests/fast/canvas/shadow-offset-6.html +/sdcard/android/layout_tests/fast/canvas/patternfill-repeat.html +/sdcard/android/layout_tests/fast/canvas/image-object-in-canvas.html +/sdcard/android/layout_tests/fast/canvas/shadow-offset-3.html +/sdcard/android/layout_tests/fast/canvas/canvas-composite.html +/sdcard/android/layout_tests/fast/canvas/gradient-add-second-start-end-stop.html +/sdcard/android/layout_tests/fast/canvas/quadraticCurveTo.xml +/sdcard/android/layout_tests/fast/canvas/fill-stroke-clip-reset-path.html +/sdcard/android/layout_tests/fast/canvas/canvas-transform-nan.html : has expected results +/sdcard/android/layout_tests/fast/canvas/canvas-text-alignment.html +/sdcard/android/layout_tests/fast/canvas/canvas-incremental-repaint.html +/sdcard/android/layout_tests/fast/canvas/canvasDrawingIntoSelf.html +/sdcard/android/layout_tests/fast/canvas/canvas-as-image.html +/sdcard/android/layout_tests/fast/canvas/canvas-before-css.html +/sdcard/android/layout_tests/fast/canvas/canvas-incremental-repaint-2.html +/sdcard/android/layout_tests/fast/canvas/canvas-transform-identity.html : has expected results +/sdcard/android/layout_tests/fast/canvas/shadow-offset-5.html +/sdcard/android/layout_tests/fast/canvas/fillrect_gradient.html +/sdcard/android/layout_tests/fast/canvas/canvas-transform-multiply.html : has expected results +/sdcard/android/layout_tests/fast/canvas/shadow-offset-2.html +/sdcard/android/layout_tests/fast/frames/contentWindow_Frame.html +/sdcard/android/layout_tests/fast/frames/onlyCommentInIFrame.html +/sdcard/android/layout_tests/fast/frames/frame-src-attribute.html +/sdcard/android/layout_tests/fast/frames/frameElement-frame.html +/sdcard/android/layout_tests/fast/frames/empty-cols-attribute.html +/sdcard/android/layout_tests/fast/frames/iframe-scrolling-attribute.html +/sdcard/android/layout_tests/fast/frames/inline-object-inside-frameset.html +/sdcard/android/layout_tests/fast/frames/valid.html +/sdcard/android/layout_tests/fast/frames/no-frame-borders.html +/sdcard/android/layout_tests/fast/frames/empty-frame-src.html +/sdcard/android/layout_tests/fast/frames/calculate-round.html +/sdcard/android/layout_tests/fast/frames/frame-navigation.html +/sdcard/android/layout_tests/fast/frames/001.html +/sdcard/android/layout_tests/fast/frames/invalid.html +/sdcard/android/layout_tests/fast/frames/frameset-style-recalc.html +/sdcard/android/layout_tests/fast/frames/viewsource-attribute.html +/sdcard/android/layout_tests/fast/frames/002.html +/sdcard/android/layout_tests/fast/frames/calculate-relative.html +/sdcard/android/layout_tests/fast/frames/calculate-order.html +/sdcard/android/layout_tests/fast/frames/calculate-percentage.html +/sdcard/android/layout_tests/fast/frames/iframe-text-contents.html +/sdcard/android/layout_tests/fast/frames/frame-scrolling-attribute.html +/sdcard/android/layout_tests/fast/frames/contentWindow_iFrame.html +/sdcard/android/layout_tests/fast/frames/frame-length-fractional.html : has expected results +/sdcard/android/layout_tests/fast/frames/calculate-fixed.html +/sdcard/android/layout_tests/fast/frames/frame-element-name.html +/sdcard/android/layout_tests/fast/frames/frame-set-whitespace-attributes.html +/sdcard/android/layout_tests/fast/frames/iframe-with-frameborder.html +/sdcard/android/layout_tests/fast/frames/frameElement-iframe.html +/sdcard/android/layout_tests/fast/frames/iframe-name-and-id.html : has expected results +/sdcard/android/layout_tests/fast/reflections/inline-crash.html +/sdcard/android/layout_tests/fast/reflections/reflection-nesting.html +/sdcard/android/layout_tests/fast/reflections/reflection-overflow-hidden.html +/sdcard/android/layout_tests/fast/reflections/table-cell.html +/sdcard/android/layout_tests/fast/reflections/reflection-direction.html diff --git a/tests/DumpRenderTree/results/layout_tests_passed.txt b/tests/DumpRenderTree/results/layout_tests_passed.txt index 03e920e..fbceabd 100644 --- a/tests/DumpRenderTree/results/layout_tests_passed.txt +++ b/tests/DumpRenderTree/results/layout_tests_passed.txt @@ -1,990 +1,1046 @@ +/sdcard/android/layout_tests/fast/replaced/object-param-no-name.html +/sdcard/android/layout_tests/fast/dynamic/subtree-common-root.html +/sdcard/android/layout_tests/fast/dynamic/hovered-detach.html +/sdcard/android/layout_tests/fast/dynamic/insertAdjacentHTML.html +/sdcard/android/layout_tests/fast/dynamic/style-access-late-stylesheet-load.html +/sdcard/android/layout_tests/fast/dynamic/insertAdjacentText.html +/sdcard/android/layout_tests/fast/dynamic/insertAdjacentHTML-allowed-parents.html +/sdcard/android/layout_tests/fast/dynamic/checkbox-selection-crash.html +/sdcard/android/layout_tests/fast/dynamic/outerHTML-no-element.html +/sdcard/android/layout_tests/fast/dynamic/5872671.html +/sdcard/android/layout_tests/fast/dynamic/ancestor-to-absolute.html +/sdcard/android/layout_tests/fast/dynamic/float-remove-above-line.html +/sdcard/android/layout_tests/fast/dynamic/recursive-layout.html +/sdcard/android/layout_tests/fast/dynamic/inline-to-block-crash.html +/sdcard/android/layout_tests/fast/text/find-backwards.html +/sdcard/android/layout_tests/fast/text/large-text-composed-char-dos.html +/sdcard/android/layout_tests/fast/text/find-case-folding.html +/sdcard/android/layout_tests/fast/text/line-breaks-after-ideographic-comma-or-full-stop.html +/sdcard/android/layout_tests/fast/encoding/gbk/chinese.html +/sdcard/android/layout_tests/fast/encoding/gbk/x-euc-cn.html +/sdcard/android/layout_tests/fast/encoding/gbk/gb_2312-80.html +/sdcard/android/layout_tests/fast/encoding/gbk/cn-gb.html +/sdcard/android/layout_tests/fast/encoding/gbk/csgb2312.html +/sdcard/android/layout_tests/fast/encoding/gbk/iso-ir-58.html +/sdcard/android/layout_tests/fast/encoding/gbk/csgb231280.html +/sdcard/android/layout_tests/fast/encoding/gbk/gb2312.html +/sdcard/android/layout_tests/fast/encoding/gbk/gbk.html +/sdcard/android/layout_tests/fast/encoding/gbk/x-gbk.html +/sdcard/android/layout_tests/fast/encoding/gbk/EUC-CN.html +/sdcard/android/layout_tests/fast/encoding/gbk/close-gbk-converter.html +/sdcard/android/layout_tests/fast/encoding/hebrew/hebrew.html +/sdcard/android/layout_tests/fast/encoding/hebrew/csISO88598I.html +/sdcard/android/layout_tests/fast/encoding/hebrew/8859-8.html +/sdcard/android/layout_tests/fast/encoding/hebrew/8859-8-e.html +/sdcard/android/layout_tests/fast/encoding/hebrew/8859-8-i.html +/sdcard/android/layout_tests/fast/encoding/hebrew/logical.html +/sdcard/android/layout_tests/fast/encoding/hebrew/iso-ir-138.html +/sdcard/android/layout_tests/fast/encoding/charset-invalid.html +/sdcard/android/layout_tests/fast/encoding/hanarei-blog32-fc2-com.html +/sdcard/android/layout_tests/fast/encoding/pseudo-tags-in-attributes.html +/sdcard/android/layout_tests/fast/encoding/decoder-allow-null-chars.html +/sdcard/android/layout_tests/fast/encoding/charset-utf16.html +/sdcard/android/layout_tests/fast/encoding/css-charset-dom.html +/sdcard/android/layout_tests/fast/encoding/pseudo-xml-4.html +/sdcard/android/layout_tests/fast/encoding/char-encoding.html +/sdcard/android/layout_tests/fast/encoding/css-link-charset.html +/sdcard/android/layout_tests/fast/encoding/latin1-winlatin.html +/sdcard/android/layout_tests/fast/encoding/no-charset-on-dynamic-script-load.html +/sdcard/android/layout_tests/fast/encoding/high-bit-latin1.html +/sdcard/android/layout_tests/fast/encoding/utf-32-little-endian-bom.html +/sdcard/android/layout_tests/fast/encoding/bandai-co-jp-releases.html +/sdcard/android/layout_tests/fast/encoding/utf-32-big-endian-bom.html +/sdcard/android/layout_tests/fast/encoding/bom-in-content.html +/sdcard/android/layout_tests/fast/encoding/bom-in-content-utf16.html +/sdcard/android/layout_tests/fast/encoding/namespace-tolerance.html +/sdcard/android/layout_tests/fast/encoding/css-charset-evil.html +/sdcard/android/layout_tests/fast/encoding/css-charset.html +/sdcard/android/layout_tests/fast/encoding/misplaced-xml-declaration.html +/sdcard/android/layout_tests/fast/encoding/charset-xuser-defined.html +/sdcard/android/layout_tests/fast/encoding/xml-charset-utf16.html +/sdcard/android/layout_tests/fast/encoding/pseudo-xml-2.html +/sdcard/android/layout_tests/fast/encoding/floraexpress-ru.html +/sdcard/android/layout_tests/fast/encoding/charset-cp1251.html +/sdcard/android/layout_tests/fast/encoding/utf-32-little-endian-nobom.xml +/sdcard/android/layout_tests/fast/encoding/charset-unicode.html +/sdcard/android/layout_tests/fast/encoding/meta-charset.html +/sdcard/android/layout_tests/fast/encoding/utf-32-big-endian-nobom.xml +/sdcard/android/layout_tests/fast/encoding/pseudo-xml-3.html +/sdcard/android/layout_tests/fast/encoding/pseudo-xml.html +/sdcard/android/layout_tests/fast/encoding/tag-in-title.html +/sdcard/android/layout_tests/fast/encoding/yahoo-mail.html +/sdcard/android/layout_tests/fast/encoding/ahram-org-eg.html +/sdcard/android/layout_tests/fast/encoding/noscript-in-head.html +/sdcard/android/layout_tests/fast/encoding/script-in-head.html +/sdcard/android/layout_tests/fast/encoding/css-cached-bom.html +/sdcard/android/layout_tests/fast/encoding/mispositioned-meta.html +/sdcard/android/layout_tests/fast/multicol/gap-non-negative.html +/sdcard/android/layout_tests/fast/multicol/content-height-zero-crash.html +/sdcard/android/layout_tests/fast/doctypes/doctype-at-end.html +/sdcard/android/layout_tests/fast/doctypes/005-case-preserving.html +/sdcard/android/layout_tests/fast/doctypes/doctype-in-element.html +/sdcard/android/layout_tests/fast/doctypes/doctype-after-comment.html +/sdcard/android/layout_tests/fast/doctypes/doctype-parsing.html +/sdcard/android/layout_tests/fast/doctypes/html-doctype.html +/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/transforms/container-transform-crash.html -/sdcard/android/layout_tests/fast/tokenizer/write-unclosed-script.html -/sdcard/android/layout_tests/fast/tokenizer/write-partial-entity.html -/sdcard/android/layout_tests/fast/tokenizer/write-inline-script-open.html -/sdcard/android/layout_tests/fast/tokenizer/write-external-script-open.html -/sdcard/android/layout_tests/fast/tokenizer/nested-multiple-scripts.html +/sdcard/android/layout_tests/fast/leaks/001.html +/sdcard/android/layout_tests/fast/leaks/002.html +/sdcard/android/layout_tests/fast/innerHTML/innerHTML-custom-tag.html +/sdcard/android/layout_tests/fast/innerHTML/additional-inline-style.html +/sdcard/android/layout_tests/fast/innerHTML/005.html +/sdcard/android/layout_tests/fast/innerHTML/javascript-url.html +/sdcard/android/layout_tests/fast/innerHTML/innerHTML-case.html +/sdcard/android/layout_tests/fast/overflow/onscroll-layer-self-destruct.html +/sdcard/android/layout_tests/fast/overflow/generated-content-crash.html +/sdcard/android/layout_tests/fast/events/dispatch-to-handle-event.html +/sdcard/android/layout_tests/fast/events/onload-after-document-close-with-subresource.html +/sdcard/android/layout_tests/fast/events/dispatchEvent-crash.html +/sdcard/android/layout_tests/fast/events/programmatic-check-no-change-event.html +/sdcard/android/layout_tests/fast/events/onunload-body-property.html +/sdcard/android/layout_tests/fast/events/init-event-after-dispatch.html +/sdcard/android/layout_tests/fast/events/delayed-style-mutation-event-crash.html +/sdcard/android/layout_tests/fast/events/anchor-empty-focus.html +/sdcard/android/layout_tests/fast/events/no-blur-on-page-leave.html +/sdcard/android/layout_tests/fast/events/onload-name-collision.html +/sdcard/android/layout_tests/fast/events/div-focus.html +/sdcard/android/layout_tests/fast/events/overflow-events.html +/sdcard/android/layout_tests/fast/events/create-document-crash-on-attach-event.html +/sdcard/android/layout_tests/fast/events/no-blur-on-enter-button.html +/sdcard/android/layout_tests/fast/events/keypress-removed-node.html +/sdcard/android/layout_tests/fast/events/shadow-boundary-crossing.html +/sdcard/android/layout_tests/fast/events/submit-reset-nested-bubble.html +/sdcard/android/layout_tests/fast/events/nested-event-remove-node-crash.html +/sdcard/android/layout_tests/fast/events/mousedown_in_scrollbar.html +/sdcard/android/layout_tests/fast/events/window-load-capture.html +/sdcard/android/layout_tests/fast/events/event-instanceof.html +/sdcard/android/layout_tests/fast/events/event-creation.html +/sdcard/android/layout_tests/fast/events/caller-access-from-event-listener.html +/sdcard/android/layout_tests/fast/events/stopPropagation-submit.html +/sdcard/android/layout_tests/fast/events/remove-event-listener.html +/sdcard/android/layout_tests/fast/events/mouseup-outside-button.html +/sdcard/android/layout_tests/fast/events/no-window-load.html +/sdcard/android/layout_tests/fast/events/event-listener-html-non-html-confusion.html +/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/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 +/sdcard/android/layout_tests/fast/events/stopPropagation-checkbox.html +/sdcard/android/layout_tests/fast/events/tab-crash-with-image-map.html +/sdcard/android/layout_tests/fast/events/simulated-key-state.html +/sdcard/android/layout_tests/fast/events/init-event-null-view.html +/sdcard/android/layout_tests/fast/events/resize-subframe.html +/sdcard/android/layout_tests/fast/events/onunload-window-property.html +/sdcard/android/layout_tests/fast/html/empty-fragment-id-goto-top.html +/sdcard/android/layout_tests/fast/html/script-allowed-types-languages.html +/sdcard/android/layout_tests/fast/html/xhtml-serialize.html +/sdcard/android/layout_tests/fast/html/body-offset-properties.html +/sdcard/android/layout_tests/fast/images/animated-background-image-crash.html +/sdcard/android/layout_tests/fast/images/border.html +/sdcard/android/layout_tests/fast/images/load-img-with-empty-src.html +/sdcard/android/layout_tests/fast/images/image-empty-data.html +/sdcard/android/layout_tests/fast/images/text-content-crash-2.html +/sdcard/android/layout_tests/fast/images/text-content-crash.html +/sdcard/android/layout_tests/fast/inspector/cssURLQuotes.html +/sdcard/android/layout_tests/fast/flexbox/inline-children-crash.html /sdcard/android/layout_tests/fast/tokenizer/nested-cached-scripts.html -/sdcard/android/layout_tests/fast/tokenizer/lessthan-terminates-tags-and-attrs.html /sdcard/android/layout_tests/fast/tokenizer/image-empty-crash.html +/sdcard/android/layout_tests/fast/tokenizer/lessthan-terminates-tags-and-attrs.html /sdcard/android/layout_tests/fast/tokenizer/ignore-tags-in-iframe.html +/sdcard/android/layout_tests/fast/tokenizer/write-partial-entity.html /sdcard/android/layout_tests/fast/tokenizer/external-script-document-open.html +/sdcard/android/layout_tests/fast/tokenizer/004.html +/sdcard/android/layout_tests/fast/tokenizer/write-inline-script-open.html +/sdcard/android/layout_tests/fast/tokenizer/write-external-script-open.html /sdcard/android/layout_tests/fast/tokenizer/doctype-search-reset.html -/sdcard/android/layout_tests/fast/tokenizer/badscript.html +/sdcard/android/layout_tests/fast/tokenizer/nested-multiple-scripts.html +/sdcard/android/layout_tests/fast/tokenizer/nested-cached-scripts-and-stylesheet.html /sdcard/android/layout_tests/fast/tokenizer/ampersand-in-special-tag.html -/sdcard/android/layout_tests/fast/tokenizer/004.html -/sdcard/android/layout_tests/fast/text/line-breaks-after-ideographic-comma-or-full-stop.html -/sdcard/android/layout_tests/fast/text/large-text-composed-char-dos.html -/sdcard/android/layout_tests/fast/text/find-case-folding.html -/sdcard/android/layout_tests/fast/table/td-display-nowrap.html -/sdcard/android/layout_tests/fast/table/section-in-table-before-misnested-text-crash-css.html -/sdcard/android/layout_tests/fast/table/rowindex-comment-nodes.html -/sdcard/android/layout_tests/fast/table/row-in-tbody-before-misnested-text-crash-css.html -/sdcard/android/layout_tests/fast/table/large-rowspan-crash.html -/sdcard/android/layout_tests/fast/table/incomplete-table-in-fragment-hang.html -/sdcard/android/layout_tests/fast/table/incomplete-table-in-fragment-2.html -/sdcard/android/layout_tests/fast/table/form-in-tbody-before-misnested-text-crash-css.html -/sdcard/android/layout_tests/fast/table/form-in-table-before-misnested-text-crash-css.html -/sdcard/android/layout_tests/fast/table/form-in-row-before-misnested-text-crash-css.html -/sdcard/android/layout_tests/fast/table/empty-auto-column-zero-divide.html -/sdcard/android/layout_tests/fast/table/destroy-cell-with-selection-crash.html -/sdcard/android/layout_tests/fast/table/colgroup-relative.html -/sdcard/android/layout_tests/fast/table/cell-in-row-before-misnested-text-crash-css.html -/sdcard/android/layout_tests/fast/table/border-changes.html -/sdcard/android/layout_tests/fast/replaced/object-param-no-name.html -/sdcard/android/layout_tests/fast/regex/test4.html -/sdcard/android/layout_tests/fast/regex/test1.html +/sdcard/android/layout_tests/fast/tokenizer/write-unclosed-script.html +/sdcard/android/layout_tests/fast/tokenizer/badscript.html +/sdcard/android/layout_tests/fast/regex/quantified-assertions.html +/sdcard/android/layout_tests/fast/regex/non-pattern-characters.html /sdcard/android/layout_tests/fast/regex/slow.html +/sdcard/android/layout_tests/fast/regex/malformed-escapes.html /sdcard/android/layout_tests/fast/regex/early-acid3-86.html -/sdcard/android/layout_tests/fast/reflections/teardown-crash.html -/sdcard/android/layout_tests/fast/reflections/reflection-computed-style.html -/sdcard/android/layout_tests/fast/parser/test-unicode-characters-in-attribute-name.html -/sdcard/android/layout_tests/fast/parser/tag-with-exclamation-point.html -/sdcard/android/layout_tests/fast/parser/strict-img-in-map.html -/sdcard/android/layout_tests/fast/parser/script-after-frameset-assert.html -/sdcard/android/layout_tests/fast/parser/rewrite-map.html -/sdcard/android/layout_tests/fast/parser/rewrite-form.html -/sdcard/android/layout_tests/fast/parser/residual-style-close-across-removed-block.html -/sdcard/android/layout_tests/fast/parser/residual-style-close-across-n-blocks.html -/sdcard/android/layout_tests/fast/parser/remove-parser-current-node.html -/sdcard/android/layout_tests/fast/parser/remove-node-stack.html -/sdcard/android/layout_tests/fast/parser/remove-current-node-parent.html -/sdcard/android/layout_tests/fast/parser/pre-first-line-break.html -/sdcard/android/layout_tests/fast/parser/parse-wbr.html -/sdcard/android/layout_tests/fast/parser/p-in-scope.html -/sdcard/android/layout_tests/fast/parser/p-in-scope-strict.html -/sdcard/android/layout_tests/fast/parser/open-comment-in-script-tricky.html -/sdcard/android/layout_tests/fast/parser/number-sign-in-map-name.html -/sdcard/android/layout_tests/fast/parser/nsup-entity.html -/sdcard/android/layout_tests/fast/parser/input-textarea-inside-select-element.html -/sdcard/android/layout_tests/fast/parser/html-whitespace.html -/sdcard/android/layout_tests/fast/parser/hex-entities-length.html -/sdcard/android/layout_tests/fast/parser/head-comment.html -/sdcard/android/layout_tests/fast/parser/entity-surrogate-pairs.html -/sdcard/android/layout_tests/fast/parser/entity-end-xmp-tag.html -/sdcard/android/layout_tests/fast/parser/entity-end-title-tag.html -/sdcard/android/layout_tests/fast/parser/entity-end-textarea-tag.html -/sdcard/android/layout_tests/fast/parser/entity-end-style-tag.html -/sdcard/android/layout_tests/fast/parser/entity-end-iframe-tag.html -/sdcard/android/layout_tests/fast/parser/entity-comment-in-title.html -/sdcard/android/layout_tests/fast/parser/entity-comment-in-script-tricky.html -/sdcard/android/layout_tests/fast/parser/entities-in-html.html -/sdcard/android/layout_tests/fast/parser/duplicate-html-body-element-IDs.html -/sdcard/android/layout_tests/fast/parser/comment-in-title.html -/sdcard/android/layout_tests/fast/parser/comment-in-script-tricky.html -/sdcard/android/layout_tests/fast/parser/assertion-empty-attribute.html -/sdcard/android/layout_tests/fast/parser/area-in-div.html -/sdcard/android/layout_tests/fast/overflow/onscroll-layer-self-destruct.html -/sdcard/android/layout_tests/fast/overflow/generated-content-crash.html -/sdcard/android/layout_tests/fast/multicol/gap-non-negative.html -/sdcard/android/layout_tests/fast/multicol/content-height-zero-crash.html -/sdcard/android/layout_tests/fast/loader/xmlhttprequest-bad-mimetype.html -/sdcard/android/layout_tests/fast/loader/window-clearing.html -/sdcard/android/layout_tests/fast/loader/user-style-sheet-resource-load-callbacks.html -/sdcard/android/layout_tests/fast/loader/url-strip-cr-lf-tab.html -/sdcard/android/layout_tests/fast/loader/url-parse-1.html -/sdcard/android/layout_tests/fast/loader/url-data-replace-backslash.html -/sdcard/android/layout_tests/fast/loader/unloadable-script.html -/sdcard/android/layout_tests/fast/loader/simultaneous-reloads-assert.html -/sdcard/android/layout_tests/fast/loader/redirect-with-open-subframe.html -/sdcard/android/layout_tests/fast/loader/redirect-with-open-subframe-2.html -/sdcard/android/layout_tests/fast/loader/meta-refresh-vs-open.html -/sdcard/android/layout_tests/fast/loader/local-css-allowed-in-strict-mode.html -/sdcard/android/layout_tests/fast/loader/loadInProgress.html -/sdcard/android/layout_tests/fast/loader/link-no-URL.html -/sdcard/android/layout_tests/fast/loader/javascript-url-encoding.html -/sdcard/android/layout_tests/fast/loader/invalid-charset-on-script-crashes-loader.html -/sdcard/android/layout_tests/fast/loader/inherit-charset-to-empty-frame.html -/sdcard/android/layout_tests/fast/loader/iframe-recursive-synchronous-load.html -/sdcard/android/layout_tests/fast/loader/font-face-empty.html -/sdcard/android/layout_tests/fast/loader/file-URL-with-port-number.html -/sdcard/android/layout_tests/fast/loader/external-script-URL-location.html -/sdcard/android/layout_tests/fast/loader/empty-ref-versus-no-ref.html -/sdcard/android/layout_tests/fast/loader/early-load-cancel.html -/sdcard/android/layout_tests/fast/loader/data-url-encoding-html.html -/sdcard/android/layout_tests/fast/loader/charset-parse.html -/sdcard/android/layout_tests/fast/leaks/002.html -/sdcard/android/layout_tests/fast/leaks/001.html -/sdcard/android/layout_tests/fast/layers/resize-layer-deletion-crash.html -/sdcard/android/layout_tests/fast/layers/removed-by-scroll-handler.html -/sdcard/android/layout_tests/fast/layers/generated-layer-scrollbar-crash.html -/sdcard/android/layout_tests/fast/js/pic/rehash-poisons-structure.html -/sdcard/android/layout_tests/fast/js/pic/get-set-proxy-object.html -/sdcard/android/layout_tests/fast/js/pic/get-empty-string.html -/sdcard/android/layout_tests/fast/js/pic/dictionary-prototype.html +/sdcard/android/layout_tests/fast/regex/test1.html +/sdcard/android/layout_tests/fast/regex/alternative-length-miscalculation.html +/sdcard/android/layout_tests/fast/regex/test4.html +/sdcard/android/layout_tests/fast/regex/non-capturing-backtracking.html /sdcard/android/layout_tests/fast/js/pic/cached-single-entry-transition.html /sdcard/android/layout_tests/fast/js/pic/cached-prototype-setter.html +/sdcard/android/layout_tests/fast/js/pic/get-empty-string.html +/sdcard/android/layout_tests/fast/js/pic/get-set-proxy-object.html +/sdcard/android/layout_tests/fast/js/pic/rehash-poisons-structure.html +/sdcard/android/layout_tests/fast/js/pic/cached-array-length-access.html +/sdcard/android/layout_tests/fast/js/pic/cached-prototype-then-immediate.html /sdcard/android/layout_tests/fast/js/pic/cached-getter-setter.html /sdcard/android/layout_tests/fast/js/pic/cached-getter-dictionary-and-proto.html +/sdcard/android/layout_tests/fast/js/pic/delete-global-object.html /sdcard/android/layout_tests/fast/js/pic/cached-deleted-properties.html -/sdcard/android/layout_tests/fast/js/window-location-href-file-urls.html -/sdcard/android/layout_tests/fast/js/while-expression-value.html +/sdcard/android/layout_tests/fast/js/pic/dictionary-prototype.html +/sdcard/android/layout_tests/fast/js/bitwise-and-on-undefined.html +/sdcard/android/layout_tests/fast/js/exception-thrown-from-eval-inside-closure.html +/sdcard/android/layout_tests/fast/js/string_replace.html +/sdcard/android/layout_tests/fast/js/ignored-result-ref-crash.html +/sdcard/android/layout_tests/fast/js/function-toString-object-literals.html +/sdcard/android/layout_tests/fast/js/numeric-conversion.html +/sdcard/android/layout_tests/fast/js/select-options-remove.html +/sdcard/android/layout_tests/fast/js/array-tostring-ignore-separator.html +/sdcard/android/layout_tests/fast/js/number-toExponential.html +/sdcard/android/layout_tests/fast/js/direct-entry-to-function-code.html /sdcard/android/layout_tests/fast/js/vardecl-preserve-vardecl.html -/sdcard/android/layout_tests/fast/js/vardecl-preserve-parameters.html +/sdcard/android/layout_tests/fast/js/unexpected-constant-crash.html +/sdcard/android/layout_tests/fast/js/var-shadows-arg-gc-crash.html +/sdcard/android/layout_tests/fast/js/arguments-bad-index.html +/sdcard/android/layout_tests/fast/js/resize-array-assign.html +/sdcard/android/layout_tests/fast/js/number-toString.html +/sdcard/android/layout_tests/fast/js/this-non-object-proto.html +/sdcard/android/layout_tests/fast/js/exception-thrown-from-new.html +/sdcard/android/layout_tests/fast/js/cyclic-proto.html /sdcard/android/layout_tests/fast/js/vardecl-preserve-arguments.html -/sdcard/android/layout_tests/fast/js/vardecl-blocks-init.html -/sdcard/android/layout_tests/fast/js/var-shadows-arg-crash.html -/sdcard/android/layout_tests/fast/js/var-declarations.html +/sdcard/android/layout_tests/fast/js/regexp-compile-crash.html /sdcard/android/layout_tests/fast/js/var-declarations-shadowing.html -/sdcard/android/layout_tests/fast/js/unmatching-argument-count.html -/sdcard/android/layout_tests/fast/js/unexpected-constant-crash.html -/sdcard/android/layout_tests/fast/js/typeof-syntax.html -/sdcard/android/layout_tests/fast/js/typeof-codegen-crash.html -/sdcard/android/layout_tests/fast/js/toString-try-else.html -/sdcard/android/layout_tests/fast/js/toString-prefix-postfix-preserve-parens.html -/sdcard/android/layout_tests/fast/js/toString-overrides.html -/sdcard/android/layout_tests/fast/js/toString-number-dot-expr.html +/sdcard/android/layout_tests/fast/js/ignored-result-null-comparison-crash.html +/sdcard/android/layout_tests/fast/js/array-sort-reentrance.html /sdcard/android/layout_tests/fast/js/toString-for-var-decl.html -/sdcard/android/layout_tests/fast/js/toString-exception.html -/sdcard/android/layout_tests/fast/js/tostring-exception-in-property-access.html -/sdcard/android/layout_tests/fast/js/toString-elision-trailing-comma.html -/sdcard/android/layout_tests/fast/js/toString-dontEnum.html -/sdcard/android/layout_tests/fast/js/throw-from-array-sort.html -/sdcard/android/layout_tests/fast/js/this-non-object-proto.html -/sdcard/android/layout_tests/fast/js/switch-behaviour.html -/sdcard/android/layout_tests/fast/js/string_replace.html -/sdcard/android/layout_tests/fast/js/string-substr.html -/sdcard/android/layout_tests/fast/js/string-split-ignore-case.html -/sdcard/android/layout_tests/fast/js/string-sort.html /sdcard/android/layout_tests/fast/js/string-slice-abnormal-values.html -/sdcard/android/layout_tests/fast/js/string-replace-exception-crash.html -/sdcard/android/layout_tests/fast/js/string-replace-3.html -/sdcard/android/layout_tests/fast/js/string-replace-2.html -/sdcard/android/layout_tests/fast/js/string-property-iteration.html -/sdcard/android/layout_tests/fast/js/string-index-overflow.html -/sdcard/android/layout_tests/fast/js/string-from-char-code.html -/sdcard/android/layout_tests/fast/js/string-capitalization.html -/sdcard/android/layout_tests/fast/js/static-scope-object.html -/sdcard/android/layout_tests/fast/js/statement-list-register-crash.html -/sdcard/android/layout_tests/fast/js/stack-unwinding.html -/sdcard/android/layout_tests/fast/js/sparse-array.html +/sdcard/android/layout_tests/fast/js/exception-linenums-in-html-1.html +/sdcard/android/layout_tests/fast/js/do-while-without-semicolon.html +/sdcard/android/layout_tests/fast/js/object-prototype-toLocaleString.html +/sdcard/android/layout_tests/fast/js/function-redefinition.html +/sdcard/android/layout_tests/fast/js/function-name.html +/sdcard/android/layout_tests/fast/js/logical-or-jless.html +/sdcard/android/layout_tests/fast/js/regexp-non-character.html +/sdcard/android/layout_tests/fast/js/assign.html +/sdcard/android/layout_tests/fast/js/for-in-avoid-duplicates.html /sdcard/android/layout_tests/fast/js/sort-stability.html -/sdcard/android/layout_tests/fast/js/sort-randomly.html -/sdcard/android/layout_tests/fast/js/sort-large-array.html -/sdcard/android/layout_tests/fast/js/slash-lineterminator-parse.html -/sdcard/android/layout_tests/fast/js/select-options-remove.html -/sdcard/android/layout_tests/fast/js/select-options-remove-gc.html -/sdcard/android/layout_tests/fast/js/select-options-add.html -/sdcard/android/layout_tests/fast/js/resize-array-assign.html -/sdcard/android/layout_tests/fast/js/reserved-words.html -/sdcard/android/layout_tests/fast/js/removing-Cf-characters.html -/sdcard/android/layout_tests/fast/js/rehash-assign.html -/sdcard/android/layout_tests/fast/js/regexp-unicode-overflow.html -/sdcard/android/layout_tests/fast/js/regexp-unicode-handling.html +/sdcard/android/layout_tests/fast/js/duplicate-param-gc-crash.html /sdcard/android/layout_tests/fast/js/regexp-stack-overflow.html -/sdcard/android/layout_tests/fast/js/regexp-ranges-and-escaped-hyphens.html -/sdcard/android/layout_tests/fast/js/regexp-range-out-of-order.html -/sdcard/android/layout_tests/fast/js/regexp-overflow.html -/sdcard/android/layout_tests/fast/js/regexp-non-character.html -/sdcard/android/layout_tests/fast/js/regexp-non-capturing-groups.html -/sdcard/android/layout_tests/fast/js/regexp-non-bmp.html -/sdcard/android/layout_tests/fast/js/regexp-no-extensions.html -/sdcard/android/layout_tests/fast/js/regexp-negative-special-characters.html -/sdcard/android/layout_tests/fast/js/regexp-many-brackets.html -/sdcard/android/layout_tests/fast/js/regexp-lastindex.html -/sdcard/android/layout_tests/fast/js/regexp-find-first-asserted.html -/sdcard/android/layout_tests/fast/js/regexp-extended-characters-more.html -/sdcard/android/layout_tests/fast/js/regexp-extended-characters-match.html -/sdcard/android/layout_tests/fast/js/regexp-extended-characters-crash.html +/sdcard/android/layout_tests/fast/js/function-argument-evaluation-before-exception.html +/sdcard/android/layout_tests/fast/js/number-toprecision.html +/sdcard/android/layout_tests/fast/js/string-property-iteration.html +/sdcard/android/layout_tests/fast/js/do-while-semicolon.html /sdcard/android/layout_tests/fast/js/regexp-divequal.html -/sdcard/android/layout_tests/fast/js/regexp-compile.html -/sdcard/android/layout_tests/fast/js/regexp-compile-crash.html -/sdcard/android/layout_tests/fast/js/regexp-char-insensitive.html -/sdcard/android/layout_tests/fast/js/regexp-caching.html -/sdcard/android/layout_tests/fast/js/reentrant-call-unwind.html -/sdcard/android/layout_tests/fast/js/read-modify-eval.html -/sdcard/android/layout_tests/fast/js/propertyIsEnumerable.html -/sdcard/android/layout_tests/fast/js/property-getters-and-setters.html -/sdcard/android/layout_tests/fast/js/primitive-method-this.html -/sdcard/android/layout_tests/fast/js/pretty-print.html -/sdcard/android/layout_tests/fast/js/prefix-syntax.html -/sdcard/android/layout_tests/fast/js/postfix-syntax.html -/sdcard/android/layout_tests/fast/js/parse-backslash-before-newline.html -/sdcard/android/layout_tests/fast/js/order-of-operations.html -/sdcard/android/layout_tests/fast/js/object-prototype-toLocaleString.html -/sdcard/android/layout_tests/fast/js/object-prototype-constructor.html +/sdcard/android/layout_tests/fast/js/named-function-expression.html +/sdcard/android/layout_tests/fast/js/array-iterate-backwards.html +/sdcard/android/layout_tests/fast/js/constructor-attributes.html +/sdcard/android/layout_tests/fast/js/array-some.html +/sdcard/android/layout_tests/fast/js/missing-title-end-tag-js.html /sdcard/android/layout_tests/fast/js/object-extra-comma.html -/sdcard/android/layout_tests/fast/js/numeric-conversion.html -/sdcard/android/layout_tests/fast/js/number-toString.html -/sdcard/android/layout_tests/fast/js/number-toprecision.html /sdcard/android/layout_tests/fast/js/number-tofixed.html -/sdcard/android/layout_tests/fast/js/number-toExponential.html -/sdcard/android/layout_tests/fast/js/null-char-in-string.html -/sdcard/android/layout_tests/fast/js/non-object-proto.html +/sdcard/android/layout_tests/fast/js/function-declarations-in-switch-statement.html +/sdcard/android/layout_tests/fast/js/regexp-extended-characters-crash.html +/sdcard/android/layout_tests/fast/js/typeof-codegen-crash.html +/sdcard/android/layout_tests/fast/js/array-indexof.html +/sdcard/android/layout_tests/fast/js/mod-crash.html +/sdcard/android/layout_tests/fast/js/eval-keyword-vs-function.html +/sdcard/android/layout_tests/fast/js/debugger.html +/sdcard/android/layout_tests/fast/js/rehash-assign.html +/sdcard/android/layout_tests/fast/js/object-prototype-constructor.html +/sdcard/android/layout_tests/fast/js/string-replace-exception-crash.html +/sdcard/android/layout_tests/fast/js/date-big-setmonth.html +/sdcard/android/layout_tests/fast/js/exception-linenums-in-html-2.html +/sdcard/android/layout_tests/fast/js/select-options-add.html +/sdcard/android/layout_tests/fast/js/toString-dontEnum.html +/sdcard/android/layout_tests/fast/js/toString-elision-trailing-comma.html +/sdcard/android/layout_tests/fast/js/regexp-negative-special-characters.html +/sdcard/android/layout_tests/fast/js/getter-setter-gc.html +/sdcard/android/layout_tests/fast/js/string-substr.html +/sdcard/android/layout_tests/fast/js/for-in-var-scope.html +/sdcard/android/layout_tests/fast/js/exec-state-marking.html +/sdcard/android/layout_tests/fast/js/string-sort.html +/sdcard/android/layout_tests/fast/js/primitive-method-this.html +/sdcard/android/layout_tests/fast/js/delete-getters-setters.html +/sdcard/android/layout_tests/fast/js/const-without-initializer.html +/sdcard/android/layout_tests/fast/js/sparse-array.html +/sdcard/android/layout_tests/fast/js/same-origin-subframe-about-blank.html /sdcard/android/layout_tests/fast/js/nested-function-scope.html -/sdcard/android/layout_tests/fast/js/navigator-plugins-crash.html -/sdcard/android/layout_tests/fast/js/named-function-expression.html +/sdcard/android/layout_tests/fast/js/reparsing-semicolon-insertion.html +/sdcard/android/layout_tests/fast/js/regexp-non-capturing-groups.html +/sdcard/android/layout_tests/fast/js/has-own-property.html +/sdcard/android/layout_tests/fast/js/window-location-href-file-urls.html +/sdcard/android/layout_tests/fast/js/convert-nan-to-bool.html +/sdcard/android/layout_tests/fast/js/regexp-extended-characters-more.html +/sdcard/android/layout_tests/fast/js/arguments.html +/sdcard/android/layout_tests/fast/js/prefix-syntax.html +/sdcard/android/layout_tests/fast/js/exception-with-handler-inside-eval-with-dynamic-scope.html +/sdcard/android/layout_tests/fast/js/for-in-exeception.html +/sdcard/android/layout_tests/fast/js/array-lastIndexOf.html /sdcard/android/layout_tests/fast/js/modify-non-references.html -/sdcard/android/layout_tests/fast/js/mod-crash.html -/sdcard/android/layout_tests/fast/js/missing-title-end-tag-js.html +/sdcard/android/layout_tests/fast/js/regexp-find-first-asserted.html +/sdcard/android/layout_tests/fast/js/sort-randomly.html +/sdcard/android/layout_tests/fast/js/array-indexing.html +/sdcard/android/layout_tests/fast/js/regexp-caching.html +/sdcard/android/layout_tests/fast/js/typeof-syntax.html +/sdcard/android/layout_tests/fast/js/regexp-character-match-out-of-order.html +/sdcard/android/layout_tests/fast/js/function-call-register-allocation.html +/sdcard/android/layout_tests/fast/js/constant-folding.html +/sdcard/android/layout_tests/fast/js/activation-object-function-lifetime.html +/sdcard/android/layout_tests/fast/js/array-filter.html +/sdcard/android/layout_tests/fast/js/implicit-global-to-global-reentry.html +/sdcard/android/layout_tests/fast/js/array-foreach.html +/sdcard/android/layout_tests/fast/js/regexp-many-brackets.html +/sdcard/android/layout_tests/fast/js/activation-proto.html +/sdcard/android/layout_tests/fast/js/toString-overrides.html +/sdcard/android/layout_tests/fast/js/regexp-unicode-overflow.html +/sdcard/android/layout_tests/fast/js/postfix-syntax.html +/sdcard/android/layout_tests/fast/js/global-recursion-on-full-stack.html +/sdcard/android/layout_tests/fast/js/number-cell-reuse.html +/sdcard/android/layout_tests/fast/js/closure-inside-extra-arg-call.html +/sdcard/android/layout_tests/fast/js/removing-Cf-characters.html +/sdcard/android/layout_tests/fast/js/pretty-print.html +/sdcard/android/layout_tests/fast/js/const.html +/sdcard/android/layout_tests/fast/js/isPrototypeOf.html /sdcard/android/layout_tests/fast/js/math.html -/sdcard/android/layout_tests/fast/js/logical-or-jless.html -/sdcard/android/layout_tests/fast/js/lexical-lookup-in-function-constructor.html +/sdcard/android/layout_tests/fast/js/string-from-char-code.html +/sdcard/android/layout_tests/fast/js/eval-overriding.html +/sdcard/android/layout_tests/fast/js/regexp-char-insensitive.html +/sdcard/android/layout_tests/fast/js/array-float-delete.html +/sdcard/android/layout_tests/fast/js/array-index-immediate-types.html +/sdcard/android/layout_tests/fast/js/integer-extremes.html +/sdcard/android/layout_tests/fast/js/regexp-non-bmp.html +/sdcard/android/layout_tests/fast/js/delete-then-put.html +/sdcard/android/layout_tests/fast/js/string-replace-2.html +/sdcard/android/layout_tests/fast/js/cached-eval-gc.html +/sdcard/android/layout_tests/fast/js/property-getters-and-setters.html +/sdcard/android/layout_tests/fast/js/array-reset-large-index.html +/sdcard/android/layout_tests/fast/js/date-proto-generic-invocation.html /sdcard/android/layout_tests/fast/js/lastModified.html -/sdcard/android/layout_tests/fast/js/isPrototypeOf.html +/sdcard/android/layout_tests/fast/js/encode-URI-test.html +/sdcard/android/layout_tests/fast/js/codegen-loops-logical-nodes.html +/sdcard/android/layout_tests/fast/js/string-capitalization.html +/sdcard/android/layout_tests/fast/js/caller-property.html +/sdcard/android/layout_tests/fast/js/date-DST-time-cusps.html +/sdcard/android/layout_tests/fast/js/regexp-unicode-handling.html +/sdcard/android/layout_tests/fast/js/unmatching-argument-count.html +/sdcard/android/layout_tests/fast/js/delete-multiple-global-blocks.html +/sdcard/android/layout_tests/fast/js/text-field-resize.html +/sdcard/android/layout_tests/fast/js/duplicate-param-crash.html +/sdcard/android/layout_tests/fast/js/switch-behaviour.html +/sdcard/android/layout_tests/fast/js/delete-syntax.html +/sdcard/android/layout_tests/fast/js/date-DST-pre-1970.html +/sdcard/android/layout_tests/fast/js/array-splice.html +/sdcard/android/layout_tests/fast/js/statement-list-register-crash.html +/sdcard/android/layout_tests/fast/js/date-set-to-nan.html +/sdcard/android/layout_tests/fast/js/code-serialize-paren.html +/sdcard/android/layout_tests/fast/js/parse-backslash-before-newline.html +/sdcard/android/layout_tests/fast/js/delete-function-parameter.html +/sdcard/android/layout_tests/fast/js/exception-expression-offset.html /sdcard/android/layout_tests/fast/js/invalid-syntax-for-function.html -/sdcard/android/layout_tests/fast/js/integer-extremes.html -/sdcard/android/layout_tests/fast/js/implicit-global-to-global-reentry.html -/sdcard/android/layout_tests/fast/js/implicit-call-with-global-reentry.html -/sdcard/android/layout_tests/fast/js/has-own-property.html -/sdcard/android/layout_tests/fast/js/gmail-re-re.html -/sdcard/android/layout_tests/fast/js/global-var-limit.html -/sdcard/android/layout_tests/fast/js/getter-setter-gc.html +/sdcard/android/layout_tests/fast/js/cyclic-prototypes.html +/sdcard/android/layout_tests/fast/js/equality.html +/sdcard/android/layout_tests/fast/js/order-of-operations.html +/sdcard/android/layout_tests/fast/js/regexp-no-extensions.html +/sdcard/android/layout_tests/fast/js/stack-unwinding.html +/sdcard/android/layout_tests/fast/js/reserved-words.html +/sdcard/android/layout_tests/fast/js/toString-try-else.html +/sdcard/android/layout_tests/fast/js/function-dot-arguments-and-caller.html +/sdcard/android/layout_tests/fast/js/do-while-expression-value.html +/sdcard/android/layout_tests/fast/js/bom-in-file-retains-correct-offset.html +/sdcard/android/layout_tests/fast/js/string-split-ignore-case.html +/sdcard/android/layout_tests/fast/js/date-constructor.html +/sdcard/android/layout_tests/fast/js/date-big-setdate.html +/sdcard/android/layout_tests/fast/js/array-every.html /sdcard/android/layout_tests/fast/js/function-toString-parentheses.html -/sdcard/android/layout_tests/fast/js/function-toString-object-literals.html -/sdcard/android/layout_tests/fast/js/function-redefinition.html -/sdcard/android/layout_tests/fast/js/function-prototype.html +/sdcard/android/layout_tests/fast/js/array-functions-non-arrays.html +/sdcard/android/layout_tests/fast/js/while-expression-value.html +/sdcard/android/layout_tests/fast/js/string-replace-3.html +/sdcard/android/layout_tests/fast/js/avl-crash.html +/sdcard/android/layout_tests/fast/js/vardecl-blocks-init.html +/sdcard/android/layout_tests/fast/js/null-char-in-string.html +/sdcard/android/layout_tests/fast/js/codegen-temporaries-multiple-global-blocks.html +/sdcard/android/layout_tests/fast/js/char-at.html +/sdcard/android/layout_tests/fast/js/propertyIsEnumerable.html +/sdcard/android/layout_tests/fast/js/exception-thrown-from-equal.html +/sdcard/android/layout_tests/fast/js/constructor.html +/sdcard/android/layout_tests/fast/js/regexp-overflow.html +/sdcard/android/layout_tests/fast/js/var-declarations.html +/sdcard/android/layout_tests/fast/js/continue-break-multiple-labels.html +/sdcard/android/layout_tests/fast/js/toString-exception.html +/sdcard/android/layout_tests/fast/js/regexp-test-null-string.html +/sdcard/android/layout_tests/fast/js/date-parse-comments-test.html +/sdcard/android/layout_tests/fast/js/select-options-remove-gc.html +/sdcard/android/layout_tests/fast/js/array-tostring-and-join.html +/sdcard/android/layout_tests/fast/js/implicit-call-with-global-reentry.html /sdcard/android/layout_tests/fast/js/function-names.html -/sdcard/android/layout_tests/fast/js/function-name.html -/sdcard/android/layout_tests/fast/js/function-dot-arguments.html -/sdcard/android/layout_tests/fast/js/function-dot-arguments-and-caller.html -/sdcard/android/layout_tests/fast/js/function-decompilation-operators.html -/sdcard/android/layout_tests/fast/js/function-declarations.html -/sdcard/android/layout_tests/fast/js/function-declarations-in-switch-statement.html -/sdcard/android/layout_tests/fast/js/function-call-register-allocation.html -/sdcard/android/layout_tests/fast/js/function-argument-evaluation-before-exception.html -/sdcard/android/layout_tests/fast/js/function-apply.html -/sdcard/android/layout_tests/fast/js/for-in-var-scope.html +/sdcard/android/layout_tests/fast/js/primitive-property-access-edge-cases.html +/sdcard/android/layout_tests/fast/js/date-preserve-milliseconds.html +/sdcard/android/layout_tests/fast/js/sort-large-array.html /sdcard/android/layout_tests/fast/js/for-in-to-text.html -/sdcard/android/layout_tests/fast/js/for-in-exeception.html -/sdcard/android/layout_tests/fast/js/for-in-avoid-duplicates.html +/sdcard/android/layout_tests/fast/js/global-var-limit.html +/sdcard/android/layout_tests/fast/js/static-scope-object.html +/sdcard/android/layout_tests/fast/js/var-shadows-arg-crash.html +/sdcard/android/layout_tests/fast/js/function-apply.html +/sdcard/android/layout_tests/fast/js/function-prototype.html +/sdcard/android/layout_tests/fast/js/tostring-exception-in-property-access.html +/sdcard/android/layout_tests/fast/js/function-declaration-statement.html +/sdcard/android/layout_tests/fast/js/date-negative-setmonth.html +/sdcard/android/layout_tests/fast/js/reentrant-call-unwind.html +/sdcard/android/layout_tests/fast/js/regexp-lastindex.html /sdcard/android/layout_tests/fast/js/finally-codegen-failure.html -/sdcard/android/layout_tests/fast/js/exec-state-marking.html -/sdcard/android/layout_tests/fast/js/exception-try-finally-scope-error.html -/sdcard/android/layout_tests/fast/js/exception-thrown-from-new.html +/sdcard/android/layout_tests/fast/js/read-modify-eval.html /sdcard/android/layout_tests/fast/js/exception-thrown-from-function-with-lazy-activation.html -/sdcard/android/layout_tests/fast/js/exception-thrown-from-eval-inside-closure.html -/sdcard/android/layout_tests/fast/js/exception-thrown-from-equal.html -/sdcard/android/layout_tests/fast/js/exception-linenums.html -/sdcard/android/layout_tests/fast/js/exception-linenums-in-html-2.html -/sdcard/android/layout_tests/fast/js/exception-linenums-in-html-1.html -/sdcard/android/layout_tests/fast/js/exception-expression-offset.html -/sdcard/android/layout_tests/fast/js/eval-var-decl.html -/sdcard/android/layout_tests/fast/js/eval-overriding.html -/sdcard/android/layout_tests/fast/js/eval-keyword-vs-function.html -/sdcard/android/layout_tests/fast/js/eval-cross-window.html -/sdcard/android/layout_tests/fast/js/eval-cache-crash.html -/sdcard/android/layout_tests/fast/js/equality.html -/sdcard/android/layout_tests/fast/js/encode-URI-test.html -/sdcard/android/layout_tests/fast/js/duplicate-param-crash.html -/sdcard/android/layout_tests/fast/js/dot-node-base-exception.html -/sdcard/android/layout_tests/fast/js/do-while-without-semicolon.html -/sdcard/android/layout_tests/fast/js/do-while-semicolon.html -/sdcard/android/layout_tests/fast/js/do-while-expression-value.html -/sdcard/android/layout_tests/fast/js/direct-entry-to-function-code.html -/sdcard/android/layout_tests/fast/js/delete-then-put.html -/sdcard/android/layout_tests/fast/js/delete-syntax.html -/sdcard/android/layout_tests/fast/js/delete-multiple-global-blocks.html -/sdcard/android/layout_tests/fast/js/delete-getters-setters.html -/sdcard/android/layout_tests/fast/js/delete-function-parameter.html +/sdcard/android/layout_tests/fast/js/cyclic-ref-toString.html +/sdcard/android/layout_tests/fast/js/date-big-constructor.html +/sdcard/android/layout_tests/fast/js/gmail-re-re.html /sdcard/android/layout_tests/fast/js/deep-recursion-test.html +/sdcard/android/layout_tests/fast/js/lexical-lookup-in-function-constructor.html +/sdcard/android/layout_tests/fast/js/regexp-range-out-of-order.html +/sdcard/android/layout_tests/fast/js/throw-from-array-sort.html +/sdcard/android/layout_tests/fast/js/slash-lineterminator-parse.html +/sdcard/android/layout_tests/fast/js/dot-node-base-exception.html +/sdcard/android/layout_tests/fast/js/codegen-peephole-locals.html +/sdcard/android/layout_tests/fast/js/constant-count.html +/sdcard/android/layout_tests/fast/js/regexp-compile.html /sdcard/android/layout_tests/fast/js/declaration-in-block.html -/sdcard/android/layout_tests/fast/js/debugger.html -/sdcard/android/layout_tests/fast/js/date-set-to-nan.html -/sdcard/android/layout_tests/fast/js/date-proto-generic-invocation.html -/sdcard/android/layout_tests/fast/js/date-preserve-milliseconds.html +/sdcard/android/layout_tests/fast/js/eval-var-decl.html +/sdcard/android/layout_tests/fast/js/eval-cross-window.html +/sdcard/android/layout_tests/fast/js/function-decompilation-operators.html +/sdcard/android/layout_tests/fast/js/sort-non-numbers.html +/sdcard/android/layout_tests/fast/js/function-declarations.html +/sdcard/android/layout_tests/fast/js/non-object-proto.html +/sdcard/android/layout_tests/fast/js/regexp-extended-characters-match.html +/sdcard/android/layout_tests/fast/js/toString-number-dot-expr.html /sdcard/android/layout_tests/fast/js/date-parse-test.html -/sdcard/android/layout_tests/fast/js/date-parse-comments-test.html -/sdcard/android/layout_tests/fast/js/date-negative-setmonth.html -/sdcard/android/layout_tests/fast/js/date-DST-time-cusps.html -/sdcard/android/layout_tests/fast/js/date-DST-pre-1970.html -/sdcard/android/layout_tests/fast/js/date-constructor.html -/sdcard/android/layout_tests/fast/js/date-big-setmonth.html -/sdcard/android/layout_tests/fast/js/date-big-setdate.html -/sdcard/android/layout_tests/fast/js/date-big-constructor.html -/sdcard/android/layout_tests/fast/js/cyclic-ref-toString.html -/sdcard/android/layout_tests/fast/js/cyclic-prototypes.html -/sdcard/android/layout_tests/fast/js/cyclic-proto.html -/sdcard/android/layout_tests/fast/js/convert-nan-to-bool.html -/sdcard/android/layout_tests/fast/js/continue-break-multiple-labels.html -/sdcard/android/layout_tests/fast/js/constructor.html -/sdcard/android/layout_tests/fast/js/constructor-attributes.html +/sdcard/android/layout_tests/fast/js/exception-try-finally-scope-error.html +/sdcard/android/layout_tests/fast/js/function-dot-arguments.html +/sdcard/android/layout_tests/fast/js/toString-prefix-postfix-preserve-parens.html +/sdcard/android/layout_tests/fast/js/regexp-ranges-and-escaped-hyphens.html +/sdcard/android/layout_tests/fast/js/exception-linenums.html +/sdcard/android/layout_tests/fast/js/array-holes.html /sdcard/android/layout_tests/fast/js/construct-global-object.html -/sdcard/android/layout_tests/fast/js/constant-folding.html -/sdcard/android/layout_tests/fast/js/constant-count.html -/sdcard/android/layout_tests/fast/js/const.html -/sdcard/android/layout_tests/fast/js/const-without-initializer.html -/sdcard/android/layout_tests/fast/js/comparefn-sort-stability.html /sdcard/android/layout_tests/fast/js/codegen-temporaries.html -/sdcard/android/layout_tests/fast/js/codegen-temporaries-multiple-global-blocks.html -/sdcard/android/layout_tests/fast/js/codegen-peephole-locals.html -/sdcard/android/layout_tests/fast/js/codegen-loops-logical-nodes.html -/sdcard/android/layout_tests/fast/js/code-serialize-paren.html -/sdcard/android/layout_tests/fast/js/closure-inside-extra-arg-call.html -/sdcard/android/layout_tests/fast/js/char-at.html -/sdcard/android/layout_tests/fast/js/caller-property.html -/sdcard/android/layout_tests/fast/js/bitwise-and-on-undefined.html -/sdcard/android/layout_tests/fast/js/avl-crash.html -/sdcard/android/layout_tests/fast/js/assign.html -/sdcard/android/layout_tests/fast/js/ascii-regexp-subject.html -/sdcard/android/layout_tests/fast/js/array-tostring-ignore-separator.html -/sdcard/android/layout_tests/fast/js/array-tostring-and-join.html -/sdcard/android/layout_tests/fast/js/array-splice.html -/sdcard/android/layout_tests/fast/js/array-sort-reentrance.html -/sdcard/android/layout_tests/fast/js/array-some.html -/sdcard/android/layout_tests/fast/js/array-reset-large-index.html -/sdcard/android/layout_tests/fast/js/array-map.html -/sdcard/android/layout_tests/fast/js/array-lastIndexOf.html /sdcard/android/layout_tests/fast/js/array-join-bug-11524.html -/sdcard/android/layout_tests/fast/js/array-iterate-backwards.html -/sdcard/android/layout_tests/fast/js/array-indexof.html -/sdcard/android/layout_tests/fast/js/array-indexing.html -/sdcard/android/layout_tests/fast/js/array-index-immediate-types.html -/sdcard/android/layout_tests/fast/js/array-holes.html -/sdcard/android/layout_tests/fast/js/array-functions-non-arrays.html -/sdcard/android/layout_tests/fast/js/array-foreach.html -/sdcard/android/layout_tests/fast/js/array-float-delete.html -/sdcard/android/layout_tests/fast/js/array-filter.html -/sdcard/android/layout_tests/fast/js/array-every.html -/sdcard/android/layout_tests/fast/js/arguments.html -/sdcard/android/layout_tests/fast/js/arguments-bad-index.html -/sdcard/android/layout_tests/fast/js/activation-proto.html -/sdcard/android/layout_tests/fast/js/activation-object-function-lifetime.html -/sdcard/android/layout_tests/fast/invalid/test-case-tr-th-td-should-not-close-dl-list.html -/sdcard/android/layout_tests/fast/invalid/nestedh3s-rapidweaver.html -/sdcard/android/layout_tests/fast/inspector/cssURLQuotes.html -/sdcard/android/layout_tests/fast/innerHTML/javascript-url.html -/sdcard/android/layout_tests/fast/innerHTML/innerHTML-custom-tag.html -/sdcard/android/layout_tests/fast/innerHTML/innerHTML-case.html -/sdcard/android/layout_tests/fast/innerHTML/additional-inline-style.html -/sdcard/android/layout_tests/fast/innerHTML/005.html +/sdcard/android/layout_tests/fast/js/with-scope-gc.html +/sdcard/android/layout_tests/fast/js/array-map.html +/sdcard/android/layout_tests/fast/js/string-index-overflow.html +/sdcard/android/layout_tests/fast/js/eval-cache-crash.html +/sdcard/android/layout_tests/fast/js/typeof-constant-string.html +/sdcard/android/layout_tests/fast/js/comparefn-sort-stability.html +/sdcard/android/layout_tests/fast/js/navigator-plugins-crash.html +/sdcard/android/layout_tests/fast/js/vardecl-preserve-parameters.html /sdcard/android/layout_tests/fast/inline/clean-after-removing-temp-boxes.html -/sdcard/android/layout_tests/fast/images/text-content-crash.html -/sdcard/android/layout_tests/fast/images/text-content-crash-2.html -/sdcard/android/layout_tests/fast/images/load-img-with-empty-src.html -/sdcard/android/layout_tests/fast/images/border.html -/sdcard/android/layout_tests/fast/images/animated-background-image-crash.html -/sdcard/android/layout_tests/fast/html/xhtml-serialize.html -/sdcard/android/layout_tests/fast/html/script-allowed-types-languages.html -/sdcard/android/layout_tests/fast/html/empty-fragment-id-goto-top.html -/sdcard/android/layout_tests/fast/html/body-offset-properties.html -/sdcard/android/layout_tests/fast/frames/viewsource-plain-text-tags.html -/sdcard/android/layout_tests/fast/frames/set-unloaded-frame-location.html -/sdcard/android/layout_tests/fast/frames/repaint-display-none-crash.html -/sdcard/android/layout_tests/fast/frames/remove-frame-with-scrollbars-crash.html -/sdcard/android/layout_tests/fast/frames/onload-remove-iframe-crash.html -/sdcard/android/layout_tests/fast/frames/negative-remaining-length-crash.html -/sdcard/android/layout_tests/fast/frames/location-put-after-removal.html -/sdcard/android/layout_tests/fast/frames/location-change.html -/sdcard/android/layout_tests/fast/frames/iframe-target.html -/sdcard/android/layout_tests/fast/frames/iframe-set-same-src.html -/sdcard/android/layout_tests/fast/frames/iframe-set-same-location.html -/sdcard/android/layout_tests/fast/frames/iframe-set-inner-html.html -/sdcard/android/layout_tests/fast/frames/iframe-remove-after-id-change.html -/sdcard/android/layout_tests/fast/frames/iframe-name-and-id.html -/sdcard/android/layout_tests/fast/frames/iframe-js-url-clientWidth.html -/sdcard/android/layout_tests/fast/frames/iframe-double-attach.html -/sdcard/android/layout_tests/fast/frames/iframe-display-none.html -/sdcard/android/layout_tests/fast/frames/hover-timer-crash.html -/sdcard/android/layout_tests/fast/frames/frame-set-same-src.html -/sdcard/android/layout_tests/fast/frames/frame-set-same-location.html -/sdcard/android/layout_tests/fast/frames/frame-name-reset.html -/sdcard/android/layout_tests/fast/frames/frame-display-none-focus.html -/sdcard/android/layout_tests/fast/frames/empty-frame-document.html -/sdcard/android/layout_tests/fast/frames/cross-site-this.html -/sdcard/android/layout_tests/fast/frames/crash-removed-iframe.html -/sdcard/android/layout_tests/fast/forms/willvalidate-009.html -/sdcard/android/layout_tests/fast/forms/willvalidate-008.html -/sdcard/android/layout_tests/fast/forms/willvalidate-007.html -/sdcard/android/layout_tests/fast/forms/willvalidate-006.html -/sdcard/android/layout_tests/fast/forms/willvalidate-005.html -/sdcard/android/layout_tests/fast/forms/willvalidate-004.html -/sdcard/android/layout_tests/fast/forms/willvalidate-003.html -/sdcard/android/layout_tests/fast/forms/willvalidate-002.html -/sdcard/android/layout_tests/fast/forms/willvalidate-001.html -/sdcard/android/layout_tests/fast/forms/willvalidate-000.html -/sdcard/android/layout_tests/fast/forms/textfield-focus-out.html -/sdcard/android/layout_tests/fast/forms/textarea-trailing-newline.html -/sdcard/android/layout_tests/fast/forms/textarea-setvalue-without-renderer.html -/sdcard/android/layout_tests/fast/forms/textarea-setvalue-submit.html -/sdcard/android/layout_tests/fast/forms/textarea-scrollbar-height.html -/sdcard/android/layout_tests/fast/forms/textarea-linewrap-dynamic.html -/sdcard/android/layout_tests/fast/forms/textarea-hard-linewrap-empty.html -/sdcard/android/layout_tests/fast/forms/textarea-crlf.html -/sdcard/android/layout_tests/fast/forms/text-set-value-crash.html -/sdcard/android/layout_tests/fast/forms/tabs-with-modifiers.html -/sdcard/android/layout_tests/fast/forms/tab-in-input.html -/sdcard/android/layout_tests/fast/forms/submit-with-base.html -/sdcard/android/layout_tests/fast/forms/submit-to-url-fragment.html -/sdcard/android/layout_tests/fast/forms/submit-nil-value-field-assert.html -/sdcard/android/layout_tests/fast/forms/slow-click.html -/sdcard/android/layout_tests/fast/forms/selected-index-assert.html -/sdcard/android/layout_tests/fast/forms/select-width-font-change.html -/sdcard/android/layout_tests/fast/forms/select-type-ahead-list-box-no-selection.html -/sdcard/android/layout_tests/fast/forms/select-set-inner.html -/sdcard/android/layout_tests/fast/forms/select-reset.html -/sdcard/android/layout_tests/fast/forms/select-replace-option.html -/sdcard/android/layout_tests/fast/forms/select-remove-option.html -/sdcard/android/layout_tests/fast/forms/select-out-of-bounds-index.html -/sdcard/android/layout_tests/fast/forms/select-namedItem.html -/sdcard/android/layout_tests/fast/forms/select-list-box-mouse-focus.html -/sdcard/android/layout_tests/fast/forms/select-index-setter.html -/sdcard/android/layout_tests/fast/forms/saved-state-adoptNode-crash.html -/sdcard/android/layout_tests/fast/forms/remove-radio-button-assert.html -/sdcard/android/layout_tests/fast/forms/range-reset.html -/sdcard/android/layout_tests/fast/forms/range-default-value.html -/sdcard/android/layout_tests/fast/forms/radio_checked_name.html -/sdcard/android/layout_tests/fast/forms/radio-no-theme-padding.html -/sdcard/android/layout_tests/fast/forms/radio-check-click-and-drag.html -/sdcard/android/layout_tests/fast/forms/radio-button-no-change-event.html -/sdcard/android/layout_tests/fast/forms/paste-multiline-text-input.html -/sdcard/android/layout_tests/fast/forms/paste-into-textarea.html -/sdcard/android/layout_tests/fast/forms/option-in-optgroup-removal.html -/sdcard/android/layout_tests/fast/forms/option-constructor-selected.html -/sdcard/android/layout_tests/fast/forms/option-change-single-selected.html -/sdcard/android/layout_tests/fast/forms/old-names.html -/sdcard/android/layout_tests/fast/forms/missing-action.html -/sdcard/android/layout_tests/fast/forms/menulist-selection-reset.html -/sdcard/android/layout_tests/fast/forms/menulist-no-renderer-onmousedown.html -/sdcard/android/layout_tests/fast/forms/listbox-typeahead-empty.html -/sdcard/android/layout_tests/fast/forms/listbox-scroll-after-options-removed.html -/sdcard/android/layout_tests/fast/forms/input-zero-height-focus.html -/sdcard/android/layout_tests/fast/forms/input-type-change-in-onfocus-mouse.html -/sdcard/android/layout_tests/fast/forms/input-type-change-in-onfocus-keyboard.html -/sdcard/android/layout_tests/fast/forms/input-setvalue-selection.html -/sdcard/android/layout_tests/fast/forms/input-selection-hidden.html -/sdcard/android/layout_tests/fast/forms/input-named-action-overrides-action-attribute.html -/sdcard/android/layout_tests/fast/forms/input-changing-value.html -/sdcard/android/layout_tests/fast/forms/input-appearance-maxlength.html -/sdcard/android/layout_tests/fast/forms/input-appearance-elementFromPoint.html -/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_selected.html -/sdcard/android/layout_tests/fast/forms/hidden-input-not-enabled.html -/sdcard/android/layout_tests/fast/forms/form-post-urlencoded.html -/sdcard/android/layout_tests/fast/forms/form-get-multipart3.html -/sdcard/android/layout_tests/fast/forms/form-get-multipart2.html -/sdcard/android/layout_tests/fast/forms/form-get-multipart.html -/sdcard/android/layout_tests/fast/forms/form-data-encoding.html -/sdcard/android/layout_tests/fast/forms/form-data-encoding-normalization-overrun.html -/sdcard/android/layout_tests/fast/forms/form-data-encoding-2.html -/sdcard/android/layout_tests/fast/forms/focus-style-pending.html -/sdcard/android/layout_tests/fast/forms/empty-get.html -/sdcard/android/layout_tests/fast/forms/element-order.html -/sdcard/android/layout_tests/fast/forms/element-by-name.html -/sdcard/android/layout_tests/fast/forms/double-focus.html -/sdcard/android/layout_tests/fast/forms/domstring-replace-crash.html -/sdcard/android/layout_tests/fast/forms/document-write.html -/sdcard/android/layout_tests/fast/forms/display-none-in-onchange-keyboard.html -/sdcard/android/layout_tests/fast/forms/cursor-position.html -/sdcard/android/layout_tests/fast/forms/button-in-forms-collection.html -/sdcard/android/layout_tests/fast/forms/button-click-DOM.html -/sdcard/android/layout_tests/fast/forms/autofocus-opera-008.html -/sdcard/android/layout_tests/fast/forms/autofocus-opera-007.html -/sdcard/android/layout_tests/fast/forms/autofocus-opera-006.html -/sdcard/android/layout_tests/fast/forms/autofocus-opera-005.html -/sdcard/android/layout_tests/fast/forms/autofocus-opera-004.html -/sdcard/android/layout_tests/fast/forms/autofocus-opera-002.html -/sdcard/android/layout_tests/fast/forms/autofocus-opera-001.html -/sdcard/android/layout_tests/fast/forms/autofocus-attribute.html -/sdcard/android/layout_tests/fast/forms/add-remove-form-elements-stress-test.html -/sdcard/android/layout_tests/fast/forms/activate-and-disabled-elements.html -/sdcard/android/layout_tests/fast/forms/8250.html -/sdcard/android/layout_tests/fast/forms/4628409.html -/sdcard/android/layout_tests/fast/forms/11423.html -/sdcard/android/layout_tests/fast/flexbox/inline-children-crash.html -/sdcard/android/layout_tests/fast/events/window-load-capture.html -/sdcard/android/layout_tests/fast/events/submit-reset-nested-bubble.html -/sdcard/android/layout_tests/fast/events/stopPropagation-submit.html -/sdcard/android/layout_tests/fast/events/stopPropagation-checkbox.html -/sdcard/android/layout_tests/fast/events/space-scroll-event.html -/sdcard/android/layout_tests/fast/events/simulated-key-state.html -/sdcard/android/layout_tests/fast/events/shadow-boundary-crossing.html -/sdcard/android/layout_tests/fast/events/selectstart-during-autoscroll.html -/sdcard/android/layout_tests/fast/events/resize-subframe.html -/sdcard/android/layout_tests/fast/events/remove-event-listener.html -/sdcard/android/layout_tests/fast/events/programmatic-check-no-change-event.html -/sdcard/android/layout_tests/fast/events/overflow-events.html -/sdcard/android/layout_tests/fast/events/onunload-body-property.html -/sdcard/android/layout_tests/fast/events/onsubmit-bubbling.html -/sdcard/android/layout_tests/fast/events/onload-after-document-close-with-subresource.html -/sdcard/android/layout_tests/fast/events/onload-after-document-close-no-subresource.html -/sdcard/android/layout_tests/fast/events/onerror-bubbling.html -/sdcard/android/layout_tests/fast/events/no-window-load.html -/sdcard/android/layout_tests/fast/events/no-blur-on-page-leave.html -/sdcard/android/layout_tests/fast/events/no-blur-on-enter-button.html -/sdcard/android/layout_tests/fast/events/nested-window-event.html -/sdcard/android/layout_tests/fast/events/nested-event-remove-node-crash.html -/sdcard/android/layout_tests/fast/events/mouseup-outside-button.html -/sdcard/android/layout_tests/fast/events/mousedown_in_scrollbar.html -/sdcard/android/layout_tests/fast/events/message-port.html -/sdcard/android/layout_tests/fast/events/message-port-inactive-document.html -/sdcard/android/layout_tests/fast/events/message-port-deleted-frame.html -/sdcard/android/layout_tests/fast/events/message-port-deleted-document.html -/sdcard/android/layout_tests/fast/events/message-port-constructor-for-deleted-document.html -/sdcard/android/layout_tests/fast/events/message-channel-listener-circular-ownership.html -/sdcard/android/layout_tests/fast/events/message-channel-gc.html -/sdcard/android/layout_tests/fast/events/message-channel-gc-3.html -/sdcard/android/layout_tests/fast/events/message-channel-gc-2.html -/sdcard/android/layout_tests/fast/events/keypress-removed-node.html -/sdcard/android/layout_tests/fast/events/keydown-remove-frame.html -/sdcard/android/layout_tests/fast/events/init-event-null-view.html -/sdcard/android/layout_tests/fast/events/init-event-after-dispatch.html -/sdcard/android/layout_tests/fast/events/event-targets.html -/sdcard/android/layout_tests/fast/events/event-listener-html-non-html-confusion.html -/sdcard/android/layout_tests/fast/events/event-instanceof.html -/sdcard/android/layout_tests/fast/events/event-creation.html -/sdcard/android/layout_tests/fast/events/div-focus.html -/sdcard/android/layout_tests/fast/events/dispatch-to-handle-event.html -/sdcard/android/layout_tests/fast/events/delayed-style-mutation-event-crash.html -/sdcard/android/layout_tests/fast/events/caller-access-from-event-listener.html -/sdcard/android/layout_tests/fast/events/anchor-empty-focus.html -/sdcard/android/layout_tests/fast/encoding/hebrew/logical.html -/sdcard/android/layout_tests/fast/encoding/hebrew/iso-ir-138.html -/sdcard/android/layout_tests/fast/encoding/hebrew/hebrew.html -/sdcard/android/layout_tests/fast/encoding/hebrew/csISO88598I.html -/sdcard/android/layout_tests/fast/encoding/hebrew/8859-8.html -/sdcard/android/layout_tests/fast/encoding/hebrew/8859-8-i.html -/sdcard/android/layout_tests/fast/encoding/hebrew/8859-8-e.html -/sdcard/android/layout_tests/fast/encoding/gbk/x-gbk.html -/sdcard/android/layout_tests/fast/encoding/gbk/x-euc-cn.html -/sdcard/android/layout_tests/fast/encoding/gbk/iso-ir-58.html -/sdcard/android/layout_tests/fast/encoding/gbk/gb_2312-80.html -/sdcard/android/layout_tests/fast/encoding/gbk/gbk.html -/sdcard/android/layout_tests/fast/encoding/gbk/gb2312.html -/sdcard/android/layout_tests/fast/encoding/gbk/EUC-CN.html -/sdcard/android/layout_tests/fast/encoding/gbk/csgb231280.html -/sdcard/android/layout_tests/fast/encoding/gbk/csgb2312.html -/sdcard/android/layout_tests/fast/encoding/gbk/cn-gb.html -/sdcard/android/layout_tests/fast/encoding/gbk/close-gbk-converter.html -/sdcard/android/layout_tests/fast/encoding/gbk/chinese.html -/sdcard/android/layout_tests/fast/encoding/yahoo-mail.html -/sdcard/android/layout_tests/fast/encoding/xml-charset-utf16.html -/sdcard/android/layout_tests/fast/encoding/utf-32-little-endian-nobom.xml -/sdcard/android/layout_tests/fast/encoding/utf-32-little-endian-bom.html -/sdcard/android/layout_tests/fast/encoding/utf-32-big-endian-nobom.xml -/sdcard/android/layout_tests/fast/encoding/utf-32-big-endian-bom.html -/sdcard/android/layout_tests/fast/encoding/tag-in-title.html -/sdcard/android/layout_tests/fast/encoding/script-in-head.html -/sdcard/android/layout_tests/fast/encoding/pseudo-xml.html -/sdcard/android/layout_tests/fast/encoding/pseudo-xml-4.html -/sdcard/android/layout_tests/fast/encoding/pseudo-xml-3.html -/sdcard/android/layout_tests/fast/encoding/pseudo-xml-2.html -/sdcard/android/layout_tests/fast/encoding/pseudo-tags-in-attributes.html -/sdcard/android/layout_tests/fast/encoding/preload-encoding.html -/sdcard/android/layout_tests/fast/encoding/noscript-in-head.html -/sdcard/android/layout_tests/fast/encoding/no-charset-on-dynamic-script-load.html -/sdcard/android/layout_tests/fast/encoding/namespace-tolerance.html -/sdcard/android/layout_tests/fast/encoding/mispositioned-meta.html -/sdcard/android/layout_tests/fast/encoding/misplaced-xml-declaration.html -/sdcard/android/layout_tests/fast/encoding/meta-charset.html -/sdcard/android/layout_tests/fast/encoding/latin1-winlatin.html -/sdcard/android/layout_tests/fast/encoding/high-bit-latin1.html -/sdcard/android/layout_tests/fast/encoding/hanarei-blog32-fc2-com.html -/sdcard/android/layout_tests/fast/encoding/floraexpress-ru.html -/sdcard/android/layout_tests/fast/encoding/decoder-allow-null-chars.html -/sdcard/android/layout_tests/fast/encoding/css-link-charset.html -/sdcard/android/layout_tests/fast/encoding/css-charset.html -/sdcard/android/layout_tests/fast/encoding/css-charset-evil.html -/sdcard/android/layout_tests/fast/encoding/css-charset-dom.html -/sdcard/android/layout_tests/fast/encoding/charset-xuser-defined.html -/sdcard/android/layout_tests/fast/encoding/charset-utf16.html -/sdcard/android/layout_tests/fast/encoding/charset-unicode.html -/sdcard/android/layout_tests/fast/encoding/charset-invalid.html -/sdcard/android/layout_tests/fast/encoding/charset-cp1251.html -/sdcard/android/layout_tests/fast/encoding/bom-in-content.html -/sdcard/android/layout_tests/fast/encoding/bom-in-content-utf16.html -/sdcard/android/layout_tests/fast/encoding/bandai-co-jp-releases.html -/sdcard/android/layout_tests/fast/encoding/ahram-org-eg.html -/sdcard/android/layout_tests/fast/dynamic/subtree-common-root.html -/sdcard/android/layout_tests/fast/dynamic/style-access-late-stylesheet-load.html -/sdcard/android/layout_tests/fast/dynamic/recursive-layout.html -/sdcard/android/layout_tests/fast/dynamic/outerHTML-no-element.html -/sdcard/android/layout_tests/fast/dynamic/insertAdjacentText.html -/sdcard/android/layout_tests/fast/dynamic/insertAdjacentHTML.html -/sdcard/android/layout_tests/fast/dynamic/insertAdjacentHTML-allowed-parents.html -/sdcard/android/layout_tests/fast/dynamic/inline-to-block-crash.html -/sdcard/android/layout_tests/fast/dynamic/hovered-detach.html -/sdcard/android/layout_tests/fast/dynamic/float-remove-above-line.html -/sdcard/android/layout_tests/fast/dynamic/checkbox-selection-crash.html -/sdcard/android/layout_tests/fast/dynamic/ancestor-to-absolute.html -/sdcard/android/layout_tests/fast/dynamic/5872671.html -/sdcard/android/layout_tests/fast/dom/Window/window-special-properties.html -/sdcard/android/layout_tests/fast/dom/Window/window-resize-and-move-sub-frame.html -/sdcard/android/layout_tests/fast/dom/Window/window-remove-event-listener.html -/sdcard/android/layout_tests/fast/dom/Window/window-property-shadowing.html -/sdcard/android/layout_tests/fast/dom/Window/window-property-shadowing-name.html -/sdcard/android/layout_tests/fast/dom/Window/window-open-top.html -/sdcard/android/layout_tests/fast/dom/Window/window-open-self.html -/sdcard/android/layout_tests/fast/dom/Window/window-open-self-from-other-frame.html -/sdcard/android/layout_tests/fast/dom/Window/window-open-parent.html -/sdcard/android/layout_tests/fast/dom/Window/window-open-parent-no-parent.html -/sdcard/android/layout_tests/fast/dom/Window/window-object-cross-frame-calls.html -/sdcard/android/layout_tests/fast/dom/Window/window-location-replace-functions.html -/sdcard/android/layout_tests/fast/dom/Window/window-function-frame-getter-precedence.html -/sdcard/android/layout_tests/fast/dom/Window/window-custom-prototype-crash.html -/sdcard/android/layout_tests/fast/dom/Window/window-closed-crash.html -/sdcard/android/layout_tests/fast/dom/Window/window-appendages-cleared.html -/sdcard/android/layout_tests/fast/dom/Window/setTimeout-no-arguments.html -/sdcard/android/layout_tests/fast/dom/Window/global-opener-function.html -/sdcard/android/layout_tests/fast/dom/Window/getMatchedCSSRules-null-crash.html -/sdcard/android/layout_tests/fast/dom/Window/element-constructors-on-window.html -/sdcard/android/layout_tests/fast/dom/Window/closure-access-after-navigation-iframe.html -/sdcard/android/layout_tests/fast/dom/Window/attr-constructor.html -/sdcard/android/layout_tests/fast/dom/Window/atob-btoa.html -/sdcard/android/layout_tests/fast/dom/Window/alert-undefined.html -/sdcard/android/layout_tests/fast/dom/TreeWalker/TreeWalker-currentNode.html -/sdcard/android/layout_tests/fast/dom/Text/replaceWholeText.html -/sdcard/android/layout_tests/fast/dom/StyleSheet/ownerNode-lifetime.html -/sdcard/android/layout_tests/fast/dom/SelectorAPI/viewless-document.html -/sdcard/android/layout_tests/fast/dom/SelectorAPI/not-supported-namespace-in-selector.html -/sdcard/android/layout_tests/fast/dom/SelectorAPI/id-fastpath.html -/sdcard/android/layout_tests/fast/dom/SelectorAPI/id-fastpath-strict.html -/sdcard/android/layout_tests/fast/dom/SelectorAPI/id-fastpath-almost-strict.html -/sdcard/android/layout_tests/fast/dom/SelectorAPI/elementRoot.html -/sdcard/android/layout_tests/fast/dom/SelectorAPI/dumpNodeList.html -/sdcard/android/layout_tests/fast/dom/SelectorAPI/dumpNodeList-almost-strict.html -/sdcard/android/layout_tests/fast/dom/SelectorAPI/detached-element.html -/sdcard/android/layout_tests/fast/dom/SelectorAPI/caseTag.html -/sdcard/android/layout_tests/fast/dom/SelectorAPI/caseID.html -/sdcard/android/layout_tests/fast/dom/SelectorAPI/caseID-strict.html -/sdcard/android/layout_tests/fast/dom/SelectorAPI/caseID-almost-strict.html -/sdcard/android/layout_tests/fast/dom/SelectorAPI/bug-17313.html -/sdcard/android/layout_tests/fast/dom/Range/range-processing-instructions.html -/sdcard/android/layout_tests/fast/dom/Range/range-modifycontents.html -/sdcard/android/layout_tests/fast/dom/Range/range-isPointInRange.html -/sdcard/android/layout_tests/fast/dom/Range/range-intersectsNode.html -/sdcard/android/layout_tests/fast/dom/Range/range-insertNode-splittext.html -/sdcard/android/layout_tests/fast/dom/Range/range-insertNode-separate-endContainer.html -/sdcard/android/layout_tests/fast/dom/Range/range-exceptions.html -/sdcard/android/layout_tests/fast/dom/Range/range-comparePoint.html -/sdcard/android/layout_tests/fast/dom/Range/range-compareNode.html -/sdcard/android/layout_tests/fast/dom/Range/range-clone-empty.html -/sdcard/android/layout_tests/fast/dom/Range/mutation.html -/sdcard/android/layout_tests/fast/dom/Range/compareBoundaryPoints-2.html -/sdcard/android/layout_tests/fast/dom/Range/compareBoundaryPoints-1.html -/sdcard/android/layout_tests/fast/dom/Range/acid3-surround-contents.html -/sdcard/android/layout_tests/fast/dom/Range/13000.html -/sdcard/android/layout_tests/fast/dom/NodeList/item-by-id-with-no-document.html -/sdcard/android/layout_tests/fast/dom/NodeList/invalidate-node-lists-when-parsing.html -/sdcard/android/layout_tests/fast/dom/NodeList/childNodes-reset-cache.html -/sdcard/android/layout_tests/fast/dom/NodeList/5725058-crash-scenario-3.html -/sdcard/android/layout_tests/fast/dom/NodeList/5725058-crash-scenario-2.html -/sdcard/android/layout_tests/fast/dom/NodeList/5725058-crash-scenario-1.html -/sdcard/android/layout_tests/fast/dom/Node/initial-values.html -/sdcard/android/layout_tests/fast/dom/Node/DOMNodeRemovedEvent.html -/sdcard/android/layout_tests/fast/dom/HTMLTableSectionElement/rows.html -/sdcard/android/layout_tests/fast/dom/HTMLTableRowElement/insertCell.html -/sdcard/android/layout_tests/fast/dom/HTMLTableRowElement/cells.html -/sdcard/android/layout_tests/fast/dom/HTMLTableElement/tBodies.html -/sdcard/android/layout_tests/fast/dom/HTMLTableElement/rows.html -/sdcard/android/layout_tests/fast/dom/HTMLTableElement/insert-row.html -/sdcard/android/layout_tests/fast/dom/HTMLTableElement/early-acid3-66-excerpt.html /sdcard/android/layout_tests/fast/dom/HTMLTableElement/early-acid3-65-excerpt.html +/sdcard/android/layout_tests/fast/dom/HTMLTableElement/early-acid3-66-excerpt.html /sdcard/android/layout_tests/fast/dom/HTMLTableElement/cellpadding-attribute.html +/sdcard/android/layout_tests/fast/dom/HTMLTableElement/insert-row.html +/sdcard/android/layout_tests/fast/dom/HTMLTableElement/tBodies.html +/sdcard/android/layout_tests/fast/dom/HTMLTableElement/rows.html +/sdcard/android/layout_tests/fast/dom/HTMLDocument/write-multiple-calls.html +/sdcard/android/layout_tests/fast/dom/HTMLDocument/document-special-properties.html +/sdcard/android/layout_tests/fast/dom/HTMLDocument/url-getset.html +/sdcard/android/layout_tests/fast/dom/HTMLDocument/writeln-call.html +/sdcard/android/layout_tests/fast/dom/HTMLDocument/document-plugins.html +/sdcard/android/layout_tests/fast/dom/HTMLDocument/title-get.html +/sdcard/android/layout_tests/fast/dom/HTMLDocument/object-by-name-unknown-child-element.html +/sdcard/android/layout_tests/fast/dom/HTMLDocument/write-call.html +/sdcard/android/layout_tests/fast/dom/HTMLDocument/object-by-name-or-id.html +/sdcard/android/layout_tests/fast/dom/HTMLDocument/document-open-return-value.html +/sdcard/android/layout_tests/fast/dom/HTMLDocument/writeln-multiple-calls.html +/sdcard/android/layout_tests/fast/dom/HTMLDocument/title-set.html +/sdcard/android/layout_tests/fast/dom/HTMLLabelElement/form/test1.html /sdcard/android/layout_tests/fast/dom/HTMLSelectElement/options-collection-set-string-length.html /sdcard/android/layout_tests/fast/dom/HTMLSelectElement/options-collection-detached.html -/sdcard/android/layout_tests/fast/dom/HTMLScriptElement/script-set-src.html +/sdcard/android/layout_tests/fast/dom/Document/replace-child.html +/sdcard/android/layout_tests/fast/dom/Document/title-property-creates-title-element.html +/sdcard/android/layout_tests/fast/dom/Document/createElementNS-namespace-err.html +/sdcard/android/layout_tests/fast/dom/Document/title-property-set-multiple-times.html +/sdcard/android/layout_tests/fast/dom/Document/document-reopen.html +/sdcard/android/layout_tests/fast/dom/Document/document-charset.html +/sdcard/android/layout_tests/fast/dom/Document/replaceChild-null-oldChild.html +/sdcard/android/layout_tests/fast/dom/Document/createAttributeNS-namespace-err.html +/sdcard/android/layout_tests/fast/dom/Document/open-with-pending-load.html +/sdcard/android/layout_tests/fast/dom/Document/doc-open-while-parsing.html +/sdcard/android/layout_tests/fast/dom/HTMLMetaElement/meta-attributes.html +/sdcard/android/layout_tests/fast/dom/Element/getAttribute-check-case-sensitivity.html +/sdcard/android/layout_tests/fast/dom/Element/attr-param-typechecking.html +/sdcard/android/layout_tests/fast/dom/Element/attribute-uppercase.html +/sdcard/android/layout_tests/fast/dom/Element/element-traversal.html +/sdcard/android/layout_tests/fast/dom/Element/onclick-case.html +/sdcard/android/layout_tests/fast/dom/Element/contains-method.html +/sdcard/android/layout_tests/fast/dom/Element/setAttribute-with-colon.html +/sdcard/android/layout_tests/fast/dom/Element/setAttribute-case-insensitivity.html +/sdcard/android/layout_tests/fast/dom/Element/dimension-properties-unrendered.html +/sdcard/android/layout_tests/fast/dom/Element/offsetTop-table-cell.html +/sdcard/android/layout_tests/fast/dom/DOMException/EventException.html +/sdcard/android/layout_tests/fast/dom/DOMException/prototype-object.html +/sdcard/android/layout_tests/fast/dom/DOMException/RangeException.html +/sdcard/android/layout_tests/fast/dom/HTMLButtonElement/value/getset.html /sdcard/android/layout_tests/fast/dom/HTMLScriptElement/script-reexecution.html +/sdcard/android/layout_tests/fast/dom/HTMLScriptElement/script-set-src.html /sdcard/android/layout_tests/fast/dom/HTMLScriptElement/script-load-events.html /sdcard/android/layout_tests/fast/dom/HTMLScriptElement/script-decoding-error-after-setting-src.html +/sdcard/android/layout_tests/fast/dom/HTMLOptionElement/collection-setter-getter.html /sdcard/android/layout_tests/fast/dom/HTMLOptionElement/set-option-index-text.html /sdcard/android/layout_tests/fast/dom/HTMLOptionElement/option-text.html /sdcard/android/layout_tests/fast/dom/HTMLOptionElement/option-prototype.html -/sdcard/android/layout_tests/fast/dom/HTMLObjectElement/form/test1.html -/sdcard/android/layout_tests/fast/dom/HTMLMetaElement/meta-attributes.html -/sdcard/android/layout_tests/fast/dom/HTMLLabelElement/form/test1.html -/sdcard/android/layout_tests/fast/dom/HTMLInputElement/size-attribute.html -/sdcard/android/layout_tests/fast/dom/HTMLInputElement/size-as-number.html +/sdcard/android/layout_tests/fast/dom/NodeList/5725058-crash-scenario-1.html +/sdcard/android/layout_tests/fast/dom/NodeList/5725058-crash-scenario-2.html +/sdcard/android/layout_tests/fast/dom/NodeList/childNodes-reset-cache.html +/sdcard/android/layout_tests/fast/dom/NodeList/5725058-crash-scenario-3.html +/sdcard/android/layout_tests/fast/dom/NodeList/invalidate-node-lists-when-parsing.html +/sdcard/android/layout_tests/fast/dom/NodeList/item-by-id-with-no-document.html +/sdcard/android/layout_tests/fast/dom/NodeList/nodelist-item-with-name.html +/sdcard/android/layout_tests/fast/dom/DOMImplementation/createDocumentType-err.html +/sdcard/android/layout_tests/fast/dom/CSSStyleDeclaration/transition-property-names.html +/sdcard/android/layout_tests/fast/dom/CSSStyleDeclaration/css-properties-case-sensitive.html +/sdcard/android/layout_tests/fast/dom/CSSStyleDeclaration/empty-string-property.html +/sdcard/android/layout_tests/fast/dom/Node/initial-values.html +/sdcard/android/layout_tests/fast/dom/Node/DOMNodeRemovedEvent.html +/sdcard/android/layout_tests/fast/dom/SelectorAPI/viewless-document.html +/sdcard/android/layout_tests/fast/dom/SelectorAPI/caseID-almost-strict.html +/sdcard/android/layout_tests/fast/dom/SelectorAPI/elementRoot.html +/sdcard/android/layout_tests/fast/dom/SelectorAPI/caseID-strict.html +/sdcard/android/layout_tests/fast/dom/SelectorAPI/not-supported-namespace-in-selector.html +/sdcard/android/layout_tests/fast/dom/SelectorAPI/id-fastpath.html +/sdcard/android/layout_tests/fast/dom/SelectorAPI/dumpNodeList.html +/sdcard/android/layout_tests/fast/dom/SelectorAPI/caseTag.html +/sdcard/android/layout_tests/fast/dom/SelectorAPI/detached-element.html +/sdcard/android/layout_tests/fast/dom/SelectorAPI/caseID.html +/sdcard/android/layout_tests/fast/dom/SelectorAPI/bug-17313.html +/sdcard/android/layout_tests/fast/dom/SelectorAPI/id-fastpath-almost-strict.html +/sdcard/android/layout_tests/fast/dom/SelectorAPI/id-fastpath-strict.html +/sdcard/android/layout_tests/fast/dom/SelectorAPI/dumpNodeList-almost-strict.html +/sdcard/android/layout_tests/fast/dom/HTMLTableSectionElement/rows.html +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/array/001.html +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/array/002.html +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/array/003.html +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/array/004.html +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/002.html +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/012.html +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/004.html +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/014.html +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/006.html +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/008.html +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/dumpNodeList.html +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/001.html +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/003.html +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/013.html +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/005.html +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/015.html +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/007.html +/sdcard/android/layout_tests/fast/dom/getElementsByClassName/009.html +/sdcard/android/layout_tests/fast/dom/HTMLInputElement/checked-pseudo-selector.html /sdcard/android/layout_tests/fast/dom/HTMLInputElement/input-text-reset.html +/sdcard/android/layout_tests/fast/dom/HTMLInputElement/size-as-number.html +/sdcard/android/layout_tests/fast/dom/HTMLInputElement/duplicate-element-names.html /sdcard/android/layout_tests/fast/dom/HTMLInputElement/input-hidden-value.html /sdcard/android/layout_tests/fast/dom/HTMLInputElement/input-checked-reset.html -/sdcard/android/layout_tests/fast/dom/HTMLInputElement/checked-pseudo-selector.html -/sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-without-renderer-width.html -/sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-src-absolute-url.html -/sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-natural-width-height.html -/sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-lowsrc-getset.html -/sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-longdesc-absolute-url.html -/sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-loading-gc.html -/sdcard/android/layout_tests/fast/dom/HTMLImageElement/constructor-mutation-event-dispatch.html -/sdcard/android/layout_tests/fast/dom/HTMLHtmlElement/set-version.html -/sdcard/android/layout_tests/fast/dom/HTMLHtmlElement/duplicate-html-element-crash.html -/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/head-check.html +/sdcard/android/layout_tests/fast/dom/HTMLInputElement/size-attribute.html +/sdcard/android/layout_tests/fast/dom/TreeWalker/TreeWalker-currentNode.html +/sdcard/android/layout_tests/fast/dom/HTMLDivElement/align/getset.html +/sdcard/android/layout_tests/fast/dom/Text/replaceWholeText.html +/sdcard/android/layout_tests/fast/dom/HTMLFormElement/htmlformelement-indexed-getter.html /sdcard/android/layout_tests/fast/dom/HTMLFormElement/elements-not-in-document.html +/sdcard/android/layout_tests/fast/dom/Window/window-closed-crash.html +/sdcard/android/layout_tests/fast/dom/Window/setTimeout-no-arguments.html +/sdcard/android/layout_tests/fast/dom/Window/window-open-self.html +/sdcard/android/layout_tests/fast/dom/Window/getMatchedCSSRules-null-crash.html +/sdcard/android/layout_tests/fast/dom/Window/window-open-self-from-other-frame.html +/sdcard/android/layout_tests/fast/dom/Window/window-custom-prototype-crash.html +/sdcard/android/layout_tests/fast/dom/Window/window-object-cross-frame-calls.html +/sdcard/android/layout_tests/fast/dom/Window/window-location-replace-functions.html +/sdcard/android/layout_tests/fast/dom/Window/attr-constructor.html +/sdcard/android/layout_tests/fast/dom/Window/window-remove-event-listener.html +/sdcard/android/layout_tests/fast/dom/Window/window-function-frame-getter-precedence.html +/sdcard/android/layout_tests/fast/dom/Window/atob-btoa.html +/sdcard/android/layout_tests/fast/dom/Window/clear-timeout.html +/sdcard/android/layout_tests/fast/dom/Window/window-property-clearing.html +/sdcard/android/layout_tests/fast/dom/Window/element-constructors-on-window.html +/sdcard/android/layout_tests/fast/dom/Window/orphaned-frame-access.html +/sdcard/android/layout_tests/fast/dom/Window/redirect-with-timer.html +/sdcard/android/layout_tests/fast/dom/Window/window-resize-and-move-sub-frame.html +/sdcard/android/layout_tests/fast/dom/Window/window-open-parent.html +/sdcard/android/layout_tests/fast/dom/Window/console-trace.html +/sdcard/android/layout_tests/fast/dom/Window/alert-undefined.html +/sdcard/android/layout_tests/fast/dom/Window/window-open-top.html +/sdcard/android/layout_tests/fast/dom/Window/window-appendages-cleared.html +/sdcard/android/layout_tests/fast/dom/Window/window-open-parent-no-parent.html +/sdcard/android/layout_tests/fast/dom/Window/closure-access-after-navigation-iframe.html +/sdcard/android/layout_tests/fast/dom/HTMLTableRowElement/cells.html +/sdcard/android/layout_tests/fast/dom/HTMLTableRowElement/insertCell.html /sdcard/android/layout_tests/fast/dom/HTMLFontElement/size-attribute.html +/sdcard/android/layout_tests/fast/dom/HTMLObjectElement/form/test1.html +/sdcard/android/layout_tests/fast/dom/HTMLObjectElement/object-as-frame.html /sdcard/android/layout_tests/fast/dom/HTMLElement/set-inner-outer-optimization.html -/sdcard/android/layout_tests/fast/dom/HTMLDocument/writeln-multiple-calls.html -/sdcard/android/layout_tests/fast/dom/HTMLDocument/writeln-call.html -/sdcard/android/layout_tests/fast/dom/HTMLDocument/write-multiple-calls.html -/sdcard/android/layout_tests/fast/dom/HTMLDocument/write-call.html -/sdcard/android/layout_tests/fast/dom/HTMLDocument/url-getset.html -/sdcard/android/layout_tests/fast/dom/HTMLDocument/title-set.html -/sdcard/android/layout_tests/fast/dom/HTMLDocument/title-get.html -/sdcard/android/layout_tests/fast/dom/HTMLDocument/object-by-name-unknown-child-element.html -/sdcard/android/layout_tests/fast/dom/HTMLDocument/object-by-name-or-id.html -/sdcard/android/layout_tests/fast/dom/HTMLDocument/document-special-properties.html -/sdcard/android/layout_tests/fast/dom/HTMLDocument/document-plugins.html -/sdcard/android/layout_tests/fast/dom/HTMLDivElement/align/getset.html -/sdcard/android/layout_tests/fast/dom/HTMLButtonElement/value/getset.html -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/array/004.html -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/array/003.html -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/array/002.html -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/array/001.html -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/dumpNodeList.html -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/015.html -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/014.html -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/013.html -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/012.html -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/009.html -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/008.html -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/007.html -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/006.html -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/005.html -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/004.html -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/003.html -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/002.html -/sdcard/android/layout_tests/fast/dom/getElementsByClassName/001.html +/sdcard/android/layout_tests/fast/dom/Range/compareBoundaryPoints-1.html +/sdcard/android/layout_tests/fast/dom/Range/range-compareNode.html +/sdcard/android/layout_tests/fast/dom/Range/range-comparePoint.html +/sdcard/android/layout_tests/fast/dom/Range/acid3-surround-contents.html +/sdcard/android/layout_tests/fast/dom/Range/mutation.html +/sdcard/android/layout_tests/fast/dom/Range/13000.html +/sdcard/android/layout_tests/fast/dom/Range/range-processing-instructions.html +/sdcard/android/layout_tests/fast/dom/Range/range-insertNode-separate-endContainer.html +/sdcard/android/layout_tests/fast/dom/Range/range-intersectsNode.html +/sdcard/android/layout_tests/fast/dom/Range/range-isPointInRange.html +/sdcard/android/layout_tests/fast/dom/Range/range-clone-empty.html +/sdcard/android/layout_tests/fast/dom/Range/compareBoundaryPoints-2.html +/sdcard/android/layout_tests/fast/dom/Range/range-modifycontents.html +/sdcard/android/layout_tests/fast/dom/Range/range-insertNode-splittext.html +/sdcard/android/layout_tests/fast/dom/Range/surroundContents-check-boundary-points.html +/sdcard/android/layout_tests/fast/dom/Range/range-exceptions.html +/sdcard/android/layout_tests/fast/dom/HTMLHeadElement/head-check.html +/sdcard/android/layout_tests/fast/dom/HTMLHtmlElement/set-version.html +/sdcard/android/layout_tests/fast/dom/HTMLHtmlElement/duplicate-html-element-crash.html +/sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-lowsrc-getset.html +/sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-src-absolute-url.html +/sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-loading-gc.html +/sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-longdesc-absolute-url.html +/sdcard/android/layout_tests/fast/dom/HTMLImageElement/constructor-mutation-event-dispatch.html +/sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-without-renderer-width.html +/sdcard/android/layout_tests/fast/dom/HTMLImageElement/image-natural-width-height.html +/sdcard/android/layout_tests/fast/dom/StyleSheet/ownerNode-lifetime.html /sdcard/android/layout_tests/fast/dom/EntityReference/readonly-exceptions.html -/sdcard/android/layout_tests/fast/dom/Element/setAttribute-with-colon.html -/sdcard/android/layout_tests/fast/dom/Element/setAttribute-case-insensitivity.html -/sdcard/android/layout_tests/fast/dom/Element/onclick-case.html -/sdcard/android/layout_tests/fast/dom/Element/offsetTop-table-cell.html -/sdcard/android/layout_tests/fast/dom/Element/getAttribute-check-case-sensitivity.html -/sdcard/android/layout_tests/fast/dom/Element/element-traversal.html -/sdcard/android/layout_tests/fast/dom/Element/dimension-properties-unrendered.html -/sdcard/android/layout_tests/fast/dom/Element/contains-method.html -/sdcard/android/layout_tests/fast/dom/Element/attribute-uppercase.html -/sdcard/android/layout_tests/fast/dom/Element/attr-param-typechecking.html -/sdcard/android/layout_tests/fast/dom/DOMImplementation/createDocumentType-err.html -/sdcard/android/layout_tests/fast/dom/DOMException/RangeException.html -/sdcard/android/layout_tests/fast/dom/DOMException/prototype-object.html -/sdcard/android/layout_tests/fast/dom/DOMException/EventException.html -/sdcard/android/layout_tests/fast/dom/Document/title-property-set-multiple-times.html -/sdcard/android/layout_tests/fast/dom/Document/title-property-creates-title-element.html -/sdcard/android/layout_tests/fast/dom/Document/replaceChild-null-oldChild.html -/sdcard/android/layout_tests/fast/dom/Document/replace-child.html -/sdcard/android/layout_tests/fast/dom/Document/open-with-pending-load.html -/sdcard/android/layout_tests/fast/dom/Document/document-reopen.html -/sdcard/android/layout_tests/fast/dom/Document/document-charset.html -/sdcard/android/layout_tests/fast/dom/Document/doc-open-while-parsing.html -/sdcard/android/layout_tests/fast/dom/Document/createElementNS-namespace-err.html -/sdcard/android/layout_tests/fast/dom/Document/createAttributeNS-namespace-err.html -/sdcard/android/layout_tests/fast/dom/CSSStyleDeclaration/transition-property-names.html -/sdcard/android/layout_tests/fast/dom/CSSStyleDeclaration/empty-string-property.html -/sdcard/android/layout_tests/fast/dom/CSSStyleDeclaration/css-properties-case-sensitive.html -/sdcard/android/layout_tests/fast/dom/XMLSerializer.html -/sdcard/android/layout_tests/fast/dom/XMLSerializer-doctype2.html -/sdcard/android/layout_tests/fast/dom/XMLSerializer-doctype.html -/sdcard/android/layout_tests/fast/dom/xmlhttprequest-invalid-values.html -/sdcard/android/layout_tests/fast/dom/xmlhttprequest-html-response-encoding.html -/sdcard/android/layout_tests/fast/dom/wrapper-identity.html -/sdcard/android/layout_tests/fast/dom/undetectable-style-filter.html -/sdcard/android/layout_tests/fast/dom/undetectable-document-all.html -/sdcard/android/layout_tests/fast/dom/title-text-property.html -/sdcard/android/layout_tests/fast/dom/title-text-property-2.html -/sdcard/android/layout_tests/fast/dom/timer-clear-interval-in-handler.html -/sdcard/android/layout_tests/fast/dom/space-to-text.html -/sdcard/android/layout_tests/fast/dom/setAttributeNS.html -/sdcard/android/layout_tests/fast/dom/setAttribute-using-initial-input-value.html -/sdcard/android/layout_tests/fast/dom/set-inner-text-newlines.html -/sdcard/android/layout_tests/fast/dom/serialize-cdata.html -/sdcard/android/layout_tests/fast/dom/select-selectedIndex-multiple.html -/sdcard/android/layout_tests/fast/dom/select-selectedIndex-bug-12942.html -/sdcard/android/layout_tests/fast/dom/script-element-without-frame-crash.html /sdcard/android/layout_tests/fast/dom/script-element-remove-self.html -/sdcard/android/layout_tests/fast/dom/script-element-gc.html -/sdcard/android/layout_tests/fast/dom/script-add.html -/sdcard/android/layout_tests/fast/dom/resource-locations-in-created-html-document.html -/sdcard/android/layout_tests/fast/dom/replace-first-child.html -/sdcard/android/layout_tests/fast/dom/replace-child-siblings.html -/sdcard/android/layout_tests/fast/dom/remove-style-element.html /sdcard/android/layout_tests/fast/dom/remove-named-attribute-crash.html -/sdcard/android/layout_tests/fast/dom/Range-insertNode-crash.html +/sdcard/android/layout_tests/fast/dom/node-item.html +/sdcard/android/layout_tests/fast/dom/clone-node-style.html +/sdcard/android/layout_tests/fast/dom/script-element-without-frame-crash.html +/sdcard/android/layout_tests/fast/dom/script-element-gc.html +/sdcard/android/layout_tests/fast/dom/duplicate-ids.html /sdcard/android/layout_tests/fast/dom/prototypes.html -/sdcard/android/layout_tests/fast/dom/prototype-chain.html -/sdcard/android/layout_tests/fast/dom/plugin-attributes-enumeration.html -/sdcard/android/layout_tests/fast/dom/outerText-no-element.html -/sdcard/android/layout_tests/fast/dom/option-properties.html +/sdcard/android/layout_tests/fast/dom/clone-node-form-elements.html +/sdcard/android/layout_tests/fast/dom/import-attribute-node.html +/sdcard/android/layout_tests/fast/dom/getter-on-window-object2.html /sdcard/android/layout_tests/fast/dom/objc-big-method-name.html -/sdcard/android/layout_tests/fast/dom/null-document-xmlhttprequest-open.html -/sdcard/android/layout_tests/fast/dom/location-assign.html -/sdcard/android/layout_tests/fast/dom/javascript-backslash.html -/sdcard/android/layout_tests/fast/dom/innerHTML-nbsp.html -/sdcard/android/layout_tests/fast/dom/innerHTML-escaping-attribute.html -/sdcard/android/layout_tests/fast/dom/inner-width-height.html -/sdcard/android/layout_tests/fast/dom/inner-text-with-no-renderer.html -/sdcard/android/layout_tests/fast/dom/inner-text-rtl.html /sdcard/android/layout_tests/fast/dom/importNode-prefix.html -/sdcard/android/layout_tests/fast/dom/importNode-null.html -/sdcard/android/layout_tests/fast/dom/import-document-fragment.html -/sdcard/android/layout_tests/fast/dom/import-attribute-node.html -/sdcard/android/layout_tests/fast/dom/implementation-createHTMLDocument.html -/sdcard/android/layout_tests/fast/dom/ImageDocument-image-deletion.html +/sdcard/android/layout_tests/fast/dom/css-dom-read.html /sdcard/android/layout_tests/fast/dom/image-object.html +/sdcard/android/layout_tests/fast/dom/gc-5.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/DOMParser-assign-variable.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/iframe-contentWindow-crash.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 +/sdcard/android/layout_tests/fast/dom/computed-style-set-property.html +/sdcard/android/layout_tests/fast/dom/inner-text-001.html +/sdcard/android/layout_tests/fast/dom/css-selectorText.html +/sdcard/android/layout_tests/fast/dom/replace-first-child.html +/sdcard/android/layout_tests/fast/dom/importNode-null.html +/sdcard/android/layout_tests/fast/dom/select-selectedIndex-multiple.html +/sdcard/android/layout_tests/fast/dom/xmlhttprequest-invalid-values.html +/sdcard/android/layout_tests/fast/dom/space-to-text.html +/sdcard/android/layout_tests/fast/dom/css-set-property-exception.html +/sdcard/android/layout_tests/fast/dom/java-applet-calls.html +/sdcard/android/layout_tests/fast/dom/plugin-attributes-enumeration.html /sdcard/android/layout_tests/fast/dom/html-attribute-types.html -/sdcard/android/layout_tests/fast/dom/getter-on-window-object2.html -/sdcard/android/layout_tests/fast/dom/getter-on-window-object.html +/sdcard/android/layout_tests/fast/dom/resource-locations-in-created-html-document.html +/sdcard/android/layout_tests/fast/dom/comment-document-fragment.html +/sdcard/android/layout_tests/fast/dom/createAttribute-exception.html +/sdcard/android/layout_tests/fast/dom/noscript-style.html +/sdcard/android/layout_tests/fast/dom/serialize-cdata.html +/sdcard/android/layout_tests/fast/dom/createDocument.html /sdcard/android/layout_tests/fast/dom/getelementbyname-invalidation.html -/sdcard/android/layout_tests/fast/dom/generic-form-element-assert.html -/sdcard/android/layout_tests/fast/dom/gc-7.html -/sdcard/android/layout_tests/fast/dom/gc-6.html -/sdcard/android/layout_tests/fast/dom/gc-5.html -/sdcard/android/layout_tests/fast/dom/gc-4.html -/sdcard/android/layout_tests/fast/dom/gc-3.html -/sdcard/android/layout_tests/fast/dom/gc-2.html -/sdcard/android/layout_tests/fast/dom/gc-11.html -/sdcard/android/layout_tests/fast/dom/gc-1.html -/sdcard/android/layout_tests/fast/dom/frame-contentWindow-crash.html -/sdcard/android/layout_tests/fast/dom/features.html -/sdcard/android/layout_tests/fast/dom/exception-no-frame-timeout-crash.html -/sdcard/android/layout_tests/fast/dom/exception-no-frame-inline-script-crash.html -/sdcard/android/layout_tests/fast/dom/everything-to-string.html -/sdcard/android/layout_tests/fast/dom/element-attribute-js-null.html +/sdcard/android/layout_tests/fast/dom/capturing-event-listeners.html +/sdcard/android/layout_tests/fast/dom/title-text-property.html +/sdcard/android/layout_tests/fast/dom/incompatible-operations.html +/sdcard/android/layout_tests/fast/dom/xmlhttprequest-html-response-encoding.html +/sdcard/android/layout_tests/fast/dom/inner-text-rtl.html +/sdcard/android/layout_tests/fast/dom/createDocument-empty.html +/sdcard/android/layout_tests/fast/dom/documenturi-assigned-junk-implies-baseuri-null.html +/sdcard/android/layout_tests/fast/dom/option-properties.html +/sdcard/android/layout_tests/fast/dom/background-shorthand-csstext.html +/sdcard/android/layout_tests/fast/dom/Range-insertNode-crash.html /sdcard/android/layout_tests/fast/dom/early-frame-url.html -/sdcard/android/layout_tests/fast/dom/duplicate-ids.html -/sdcard/android/layout_tests/fast/dom/duplicate-ids-document-order.html -/sdcard/android/layout_tests/fast/dom/DOMParser-assign-variable.html -/sdcard/android/layout_tests/fast/dom/domListEnumeration.html -/sdcard/android/layout_tests/fast/dom/dom-instanceof.html +/sdcard/android/layout_tests/fast/dom/everything-to-string.html +/sdcard/android/layout_tests/fast/dom/attribute-empty-value-no-children.html +/sdcard/android/layout_tests/fast/dom/length-attribute-mapping.html /sdcard/android/layout_tests/fast/dom/documenturi-loses-to-base-tag.html -/sdcard/android/layout_tests/fast/dom/documenturi-assigned-junk-implies-relative-urls-do-not-resolve.html -/sdcard/android/layout_tests/fast/dom/documenturi-assigned-junk-implies-baseuri-null.html -/sdcard/android/layout_tests/fast/dom/documenturi-affects-relative-paths.html -/sdcard/android/layout_tests/fast/dom/documentElement-null.html -/sdcard/android/layout_tests/fast/dom/document-scripts.html -/sdcard/android/layout_tests/fast/dom/document-dir-property.html -/sdcard/android/layout_tests/fast/dom/document-attribute-js-null.html +/sdcard/android/layout_tests/fast/dom/createDocumentType2.html +/sdcard/android/layout_tests/fast/dom/gc-6.html +/sdcard/android/layout_tests/fast/dom/attribute-case-sensitivity.html +/sdcard/android/layout_tests/fast/dom/compatMode-Compat.html +/sdcard/android/layout_tests/fast/dom/namespaces-1.html +/sdcard/android/layout_tests/fast/dom/getter-on-window-object.html +/sdcard/android/layout_tests/fast/dom/constructors-overriding.html +/sdcard/android/layout_tests/fast/dom/defaultView.html +/sdcard/android/layout_tests/fast/dom/collection-null-like-arguments.html +/sdcard/android/layout_tests/fast/dom/gc-3.html +/sdcard/android/layout_tests/fast/dom/compatMode-Strict.html +/sdcard/android/layout_tests/fast/dom/attribute-downcast-right.html /sdcard/android/layout_tests/fast/dom/document-all-select.html -/sdcard/android/layout_tests/fast/dom/document-all-input.html +/sdcard/android/layout_tests/fast/dom/anchor-backslash.html +/sdcard/android/layout_tests/fast/dom/css-mediarule-functions.html +/sdcard/android/layout_tests/fast/dom/gc-acid3.html +/sdcard/android/layout_tests/fast/dom/duplicate-ids-document-order.html +/sdcard/android/layout_tests/fast/dom/exception-no-frame-inline-script-crash.html +/sdcard/android/layout_tests/fast/dom/XMLSerializer-doctype2.html /sdcard/android/layout_tests/fast/dom/dir-no-body.html -/sdcard/android/layout_tests/fast/dom/destroy-selected-radio-button-crash.html -/sdcard/android/layout_tests/fast/dom/defaultView.html -/sdcard/android/layout_tests/fast/dom/css-shortHands.html -/sdcard/android/layout_tests/fast/dom/css-set-property-exception.html -/sdcard/android/layout_tests/fast/dom/css-selectorText.html +/sdcard/android/layout_tests/fast/dom/null-document-window-open-crash.html /sdcard/android/layout_tests/fast/dom/css-RGBValue.html -/sdcard/android/layout_tests/fast/dom/css-mediarule-functions.html -/sdcard/android/layout_tests/fast/dom/css-element-attribute-js-null.html -/sdcard/android/layout_tests/fast/dom/css-dom-read.html -/sdcard/android/layout_tests/fast/dom/css-dom-read-2.html -/sdcard/android/layout_tests/fast/dom/createElementNS.html +/sdcard/android/layout_tests/fast/dom/innerHTML-nbsp.html +/sdcard/android/layout_tests/fast/dom/documentElement-null.html +/sdcard/android/layout_tests/fast/dom/class-all-whitespace.html +/sdcard/android/layout_tests/fast/dom/wrapper-identity.html +/sdcard/android/layout_tests/fast/dom/null-document-location-assign-crash.html /sdcard/android/layout_tests/fast/dom/createElement.html /sdcard/android/layout_tests/fast/dom/createElement-with-column.xml -/sdcard/android/layout_tests/fast/dom/createElement-with-column.html -/sdcard/android/layout_tests/fast/dom/createDocumentType2.html -/sdcard/android/layout_tests/fast/dom/createDocument.html -/sdcard/android/layout_tests/fast/dom/createDocument-empty.html -/sdcard/android/layout_tests/fast/dom/createAttribute-exception.html -/sdcard/android/layout_tests/fast/dom/constructors-overriding.html +/sdcard/android/layout_tests/fast/dom/simultaneouslyRegsiteredTimerFireOrder.html +/sdcard/android/layout_tests/fast/dom/generic-form-element-assert.html +/sdcard/android/layout_tests/fast/dom/css-shortHands.html +/sdcard/android/layout_tests/fast/dom/dom-instanceof.html +/sdcard/android/layout_tests/fast/dom/array-special-accessors-should-ignore-items.html +/sdcard/android/layout_tests/fast/dom/element-attribute-js-null.html +/sdcard/android/layout_tests/fast/dom/css-dom-read-2.html +/sdcard/android/layout_tests/fast/dom/navigator-cookieEnabled-no-crash.html +/sdcard/android/layout_tests/fast/dom/import-document-fragment.html +/sdcard/android/layout_tests/fast/dom/setter-type-enforcement.html +/sdcard/android/layout_tests/fast/dom/XMLSerializer.html +/sdcard/android/layout_tests/fast/dom/navigator-vendorSub.html +/sdcard/android/layout_tests/fast/dom/gc-7.html +/sdcard/android/layout_tests/fast/dom/outerText-no-element.html +/sdcard/android/layout_tests/fast/dom/replace-child-siblings.html /sdcard/android/layout_tests/fast/dom/constants.html -/sdcard/android/layout_tests/fast/dom/computed-style-set-property.html -/sdcard/android/layout_tests/fast/dom/compatMode-Strict.html -/sdcard/android/layout_tests/fast/dom/compatMode-Compat.html +/sdcard/android/layout_tests/fast/dom/inner-text-with-no-renderer.html +/sdcard/android/layout_tests/fast/dom/onerror-img.html +/sdcard/android/layout_tests/fast/dom/document-attribute-js-null.html +/sdcard/android/layout_tests/fast/dom/css-element-attribute-js-null.html +/sdcard/android/layout_tests/fast/dom/gc-11.html +/sdcard/android/layout_tests/fast/dom/mutation-event-remove-inserted-node.html +/sdcard/android/layout_tests/fast/dom/null-chardata-crash.html /sdcard/android/layout_tests/fast/dom/compatMode-AlmostStrict.html -/sdcard/android/layout_tests/fast/dom/comment-dom-node.html -/sdcard/android/layout_tests/fast/dom/comment-document-fragment.html -/sdcard/android/layout_tests/fast/dom/collection-null-like-arguments.html +/sdcard/android/layout_tests/fast/dom/createElement-with-column.html +/sdcard/android/layout_tests/fast/dom/exception-no-frame-timeout-crash.html +/sdcard/android/layout_tests/fast/dom/title-text-property-2.html +/sdcard/android/layout_tests/fast/dom/no-elements.html +/sdcard/android/layout_tests/fast/dom/non-numeric-values-numeric-parameters.html +/sdcard/android/layout_tests/fast/dom/gc-4.html +/sdcard/android/layout_tests/fast/dom/inner-width-height.html +/sdcard/android/layout_tests/fast/dom/XMLSerializer-doctype.html +/sdcard/android/layout_tests/fast/dom/createElementNS.html +/sdcard/android/layout_tests/fast/dom/undetectable-document-all.html +/sdcard/android/layout_tests/fast/dom/prototype-chain.html +/sdcard/android/layout_tests/fast/dom/gc-1.html +/sdcard/android/layout_tests/fast/dom/select-selectedIndex-bug-12942.html +/sdcard/android/layout_tests/fast/dom/frame-contentWindow-crash.html +/sdcard/android/layout_tests/fast/dom/namednodemap-namelookup.html +/sdcard/android/layout_tests/fast/dom/null-document-location-replace-crash.html +/sdcard/android/layout_tests/fast/dom/htmlcollection-detectability.html +/sdcard/android/layout_tests/fast/dom/documenturi-assigned-junk-implies-relative-urls-do-not-resolve.html /sdcard/android/layout_tests/fast/dom/collection-namedItem-via-item.html -/sdcard/android/layout_tests/fast/dom/clone-node-style.html -/sdcard/android/layout_tests/fast/dom/clone-node-form-elements.html -/sdcard/android/layout_tests/fast/dom/clone-node-form-elements-with-attr.html -/sdcard/android/layout_tests/fast/dom/class-all-whitespace.html -/sdcard/android/layout_tests/fast/dom/capturing-event-listeners.html +/sdcard/android/layout_tests/fast/dom/set-inner-text-newlines.html +/sdcard/android/layout_tests/fast/dom/document-dir-property.html +/sdcard/android/layout_tests/fast/dom/undetectable-style-filter.html +/sdcard/android/layout_tests/fast/dom/domListEnumeration.html +/sdcard/android/layout_tests/fast/dom/destroy-selected-radio-button-crash.html +/sdcard/android/layout_tests/fast/dom/script-add.html +/sdcard/android/layout_tests/fast/dom/iframe-contentWindow-crash.html +/sdcard/android/layout_tests/fast/dom/comment-dom-node.html +/sdcard/android/layout_tests/fast/dom/features.html /sdcard/android/layout_tests/fast/dom/canvasContext2d-element-attribute-js-null.html -/sdcard/android/layout_tests/fast/dom/background-shorthand-csstext.html +/sdcard/android/layout_tests/fast/dom/remove-style-element.html /sdcard/android/layout_tests/fast/dom/attribute-namespaces-get-set.html -/sdcard/android/layout_tests/fast/dom/attribute-empty-value-no-children.html -/sdcard/android/layout_tests/fast/dom/attribute-downcast-right.html -/sdcard/android/layout_tests/fast/dom/attribute-case-sensitivity.html -/sdcard/android/layout_tests/fast/dom/array-special-accessors-should-ignore-items.html -/sdcard/android/layout_tests/fast/dom/anchor-toString.html -/sdcard/android/layout_tests/fast/dom/anchor-backslash.html -/sdcard/android/layout_tests/fast/doctypes/html-doctype.html -/sdcard/android/layout_tests/fast/doctypes/doctype-parsing.html -/sdcard/android/layout_tests/fast/doctypes/doctype-in-element.html -/sdcard/android/layout_tests/fast/doctypes/doctype-at-end.html -/sdcard/android/layout_tests/fast/doctypes/doctype-after-comment.html -/sdcard/android/layout_tests/fast/doctypes/005-case-preserving.html -/sdcard/android/layout_tests/fast/css-generated-content/reset-content-to-initial.html -/sdcard/android/layout_tests/fast/css-generated-content/empty-content-with-float-crash.html -/sdcard/android/layout_tests/fast/css/variables/invalid-identifier.html -/sdcard/android/layout_tests/fast/css/counters/counter-number-input.html -/sdcard/android/layout_tests/fast/css/counters/counter-function-input.html +/sdcard/android/layout_tests/fast/dom/innerHTML-escaping-attribute.html +/sdcard/android/layout_tests/fast/dom/null-document-xmlhttprequest-open.html +/sdcard/android/layout_tests/fast/invalid/nestedh3s-rapidweaver.html +/sdcard/android/layout_tests/fast/forms/element-by-name.html +/sdcard/android/layout_tests/fast/forms/HTMLOptionElement_selected.html +/sdcard/android/layout_tests/fast/forms/willvalidate-003.html +/sdcard/android/layout_tests/fast/forms/radio-button-no-change-event.html +/sdcard/android/layout_tests/fast/forms/menulist-selection-reset.html +/sdcard/android/layout_tests/fast/forms/textfield-focus-out.html +/sdcard/android/layout_tests/fast/forms/willvalidate-000.html +/sdcard/android/layout_tests/fast/forms/form-data-encoding-normalization-overrun.html +/sdcard/android/layout_tests/fast/forms/select-reset.html +/sdcard/android/layout_tests/fast/forms/input-named-action-overrides-action-attribute.html +/sdcard/android/layout_tests/fast/forms/empty-get.html +/sdcard/android/layout_tests/fast/forms/display-none-in-onchange-keyboard.html +/sdcard/android/layout_tests/fast/forms/range-default-value.html +/sdcard/android/layout_tests/fast/forms/paste-into-textarea.html +/sdcard/android/layout_tests/fast/forms/4628409.html +/sdcard/android/layout_tests/fast/forms/radio-no-theme-padding.html +/sdcard/android/layout_tests/fast/forms/autofocus-opera-006.html +/sdcard/android/layout_tests/fast/forms/activate-and-disabled-elements.html +/sdcard/android/layout_tests/fast/forms/form-get-multipart2.html +/sdcard/android/layout_tests/fast/forms/select-replace-option.html +/sdcard/android/layout_tests/fast/forms/textarea-setvalue-submit.html +/sdcard/android/layout_tests/fast/forms/cursor-position.html +/sdcard/android/layout_tests/fast/forms/willvalidate-007.html +/sdcard/android/layout_tests/fast/forms/input-changing-value.html +/sdcard/android/layout_tests/fast/forms/double-focus.html +/sdcard/android/layout_tests/fast/forms/form-data-encoding-2.html +/sdcard/android/layout_tests/fast/forms/focus.html +/sdcard/android/layout_tests/fast/forms/button-in-forms-collection.html +/sdcard/android/layout_tests/fast/forms/input-delete.html +/sdcard/android/layout_tests/fast/forms/placeholder-non-textfield.html +/sdcard/android/layout_tests/fast/forms/element-order.html +/sdcard/android/layout_tests/fast/forms/willvalidate-001.html +/sdcard/android/layout_tests/fast/forms/option-constructor-selected.html +/sdcard/android/layout_tests/fast/forms/8250.html +/sdcard/android/layout_tests/fast/forms/input-zero-height-focus.html +/sdcard/android/layout_tests/fast/forms/var-name-conflict-in-form-event-handler.html +/sdcard/android/layout_tests/fast/forms/range-reset.html +/sdcard/android/layout_tests/fast/forms/textarea-linewrap-dynamic.html +/sdcard/android/layout_tests/fast/forms/select-remove-option.html +/sdcard/android/layout_tests/fast/forms/onselect-selectall.html +/sdcard/android/layout_tests/fast/forms/select-width-font-change.html +/sdcard/android/layout_tests/fast/forms/text-field-setvalue-crash.html +/sdcard/android/layout_tests/fast/forms/paste-multiline-text-input.html +/sdcard/android/layout_tests/fast/forms/form-get-multipart.html +/sdcard/android/layout_tests/fast/forms/tab-in-input.html +/sdcard/android/layout_tests/fast/forms/button-click-DOM.html +/sdcard/android/layout_tests/fast/forms/domstring-replace-crash.html +/sdcard/android/layout_tests/fast/forms/submit-nil-value-field-assert.html +/sdcard/android/layout_tests/fast/forms/autofocus-opera-007.html +/sdcard/android/layout_tests/fast/forms/form-get-multipart3.html +/sdcard/android/layout_tests/fast/forms/select-out-of-bounds-index.html +/sdcard/android/layout_tests/fast/forms/select-type-ahead-list-box-no-selection.html +/sdcard/android/layout_tests/fast/forms/selected-index-assert.html +/sdcard/android/layout_tests/fast/forms/remove-radio-button-assert.html +/sdcard/android/layout_tests/fast/forms/textarea-crlf.html +/sdcard/android/layout_tests/fast/forms/form-collection-lookup.html +/sdcard/android/layout_tests/fast/forms/autofocus-opera-004.html +/sdcard/android/layout_tests/fast/forms/select-list-box-mouse-focus.html +/sdcard/android/layout_tests/fast/forms/text-set-value-crash.html +/sdcard/android/layout_tests/fast/forms/willvalidate-008.html +/sdcard/android/layout_tests/fast/forms/autofocus-opera-001.html +/sdcard/android/layout_tests/fast/forms/select-namedItem.html +/sdcard/android/layout_tests/fast/forms/willvalidate-005.html +/sdcard/android/layout_tests/fast/forms/select-index-setter.html +/sdcard/android/layout_tests/fast/forms/option-change-single-selected.html +/sdcard/android/layout_tests/fast/forms/listbox-scroll-after-options-removed.html +/sdcard/android/layout_tests/fast/forms/willvalidate-002.html +/sdcard/android/layout_tests/fast/forms/form-data-encoding.html +/sdcard/android/layout_tests/fast/forms/input-appearance-elementFromPoint.html +/sdcard/android/layout_tests/fast/forms/select-set-inner.html +/sdcard/android/layout_tests/fast/forms/missing-action.html +/sdcard/android/layout_tests/fast/forms/textarea-scrollbar-height.html +/sdcard/android/layout_tests/fast/forms/textarea-default-value-leading-newline.html +/sdcard/android/layout_tests/fast/forms/autofocus-opera-008.html +/sdcard/android/layout_tests/fast/forms/listbox-typeahead-empty.html +/sdcard/android/layout_tests/fast/forms/submit-to-url-fragment.html +/sdcard/android/layout_tests/fast/forms/textarea-setvalue-without-renderer.html +/sdcard/android/layout_tests/fast/forms/hidden-input-not-enabled.html +/sdcard/android/layout_tests/fast/forms/autofocus-opera-005.html +/sdcard/android/layout_tests/fast/forms/input-appearance-maxlength.html +/sdcard/android/layout_tests/fast/forms/submit-with-base.html +/sdcard/android/layout_tests/fast/forms/willvalidate-009.html +/sdcard/android/layout_tests/fast/forms/input-setvalue-selection.html +/sdcard/android/layout_tests/fast/forms/autofocus-opera-002.html +/sdcard/android/layout_tests/fast/forms/old-names.html +/sdcard/android/layout_tests/fast/forms/willvalidate-006.html +/sdcard/android/layout_tests/fast/forms/focus-style-pending.html +/sdcard/android/layout_tests/fast/forms/textarea-hard-linewrap-empty.html +/sdcard/android/layout_tests/fast/forms/document-write.html +/sdcard/android/layout_tests/fast/forms/slow-click.html +/sdcard/android/layout_tests/fast/forms/autofocus-attribute.html +/sdcard/android/layout_tests/fast/table/incomplete-table-in-fragment-hang.html +/sdcard/android/layout_tests/fast/table/section-in-table-before-misnested-text-crash-css.html +/sdcard/android/layout_tests/fast/table/large-rowspan-crash.html +/sdcard/android/layout_tests/fast/table/colgroup-relative.html +/sdcard/android/layout_tests/fast/table/border-changes.html +/sdcard/android/layout_tests/fast/table/cell-in-row-before-misnested-text-crash-css.html +/sdcard/android/layout_tests/fast/table/incomplete-table-in-fragment-2.html +/sdcard/android/layout_tests/fast/table/rowindex-comment-nodes.html +/sdcard/android/layout_tests/fast/table/td-display-nowrap.html +/sdcard/android/layout_tests/fast/table/row-in-tbody-before-misnested-text-crash-css.html +/sdcard/android/layout_tests/fast/table/empty-auto-column-zero-divide.html +/sdcard/android/layout_tests/fast/table/form-in-tbody-before-misnested-text-crash-css.html +/sdcard/android/layout_tests/fast/table/form-in-table-before-misnested-text-crash-css.html +/sdcard/android/layout_tests/fast/table/destroy-cell-with-selection-crash.html +/sdcard/android/layout_tests/fast/table/form-in-row-before-misnested-text-crash-css.html /sdcard/android/layout_tests/fast/css/counters/counter-function-input-2.html -/sdcard/android/layout_tests/fast/css/word-break-user-modify-allowed-values.html -/sdcard/android/layout_tests/fast/css/transition_shorthand_parsing.html -/sdcard/android/layout_tests/fast/css/transition-timing-function.html +/sdcard/android/layout_tests/fast/css/counters/counter-function-input.html +/sdcard/android/layout_tests/fast/css/counters/counter-number-input.html +/sdcard/android/layout_tests/fast/css/variables/invalid-identifier.html +/sdcard/android/layout_tests/fast/css/media-rule-dyn.html /sdcard/android/layout_tests/fast/css/transform-function-lowercase-assert.html -/sdcard/android/layout_tests/fast/css/stale-style-selector-crash-2.html -/sdcard/android/layout_tests/fast/css/stale-style-selector-crash-1.html -/sdcard/android/layout_tests/fast/css/sheet-title.html -/sdcard/android/layout_tests/fast/css/remove-shorthand.html -/sdcard/android/layout_tests/fast/css/readonly-pseudoclass-opera-005.html +/sdcard/android/layout_tests/fast/css/word-break-user-modify-allowed-values.html +/sdcard/android/layout_tests/fast/css/import-style-update.html +/sdcard/android/layout_tests/fast/css/outline-invert-assertion.html +/sdcard/android/layout_tests/fast/css/insertRule-font-face.html /sdcard/android/layout_tests/fast/css/readonly-pseudoclass-opera-004.html -/sdcard/android/layout_tests/fast/css/readonly-pseudoclass-opera-003.html -/sdcard/android/layout_tests/fast/css/readonly-pseudoclass-opera-002.html +/sdcard/android/layout_tests/fast/css/transform-inline-style-remove.html +/sdcard/android/layout_tests/fast/css/padding-no-renderer.html +/sdcard/android/layout_tests/fast/css/transition_shorthand_parsing.html +/sdcard/android/layout_tests/fast/css/css-selector-text.html +/sdcard/android/layout_tests/fast/css/dashboard-regions-attr-crash.html /sdcard/android/layout_tests/fast/css/readonly-pseudoclass-opera-001.html +/sdcard/android/layout_tests/fast/css/font-property-priority.html +/sdcard/android/layout_tests/fast/css/computed-style-negative-top.html +/sdcard/android/layout_tests/fast/css/device-aspect-ratio.html /sdcard/android/layout_tests/fast/css/pseudostyle-anonymous-text.html -/sdcard/android/layout_tests/fast/css/parse-timing-function-crash.html -/sdcard/android/layout_tests/fast/css/padding-no-renderer.html -/sdcard/android/layout_tests/fast/css/overflow-property.html -/sdcard/android/layout_tests/fast/css/outline-hidden-illegal-value.html -/sdcard/android/layout_tests/fast/css/orphaned_units_crash.html -/sdcard/android/layout_tests/fast/css/nested-rule-parent-sheet.html -/sdcard/android/layout_tests/fast/css/min-device-aspect-ratio.html -/sdcard/android/layout_tests/fast/css/media-rule-dyn.html -/sdcard/android/layout_tests/fast/css/max-height-and-max-width.html -/sdcard/android/layout_tests/fast/css/max-device-aspect-ratio.html -/sdcard/android/layout_tests/fast/css/legacy-opacity-styles.html -/sdcard/android/layout_tests/fast/css/invalid-rule-value.html -/sdcard/android/layout_tests/fast/css/invalid-cursor-property-crash.html -/sdcard/android/layout_tests/fast/css/insertRule-media.html -/sdcard/android/layout_tests/fast/css/insertRule-font-face.html -/sdcard/android/layout_tests/fast/css/import-style-update.html +/sdcard/android/layout_tests/fast/css/css-properties-case-insensitive.html +/sdcard/android/layout_tests/fast/css/getComputedStyle-border-image.html +/sdcard/android/layout_tests/fast/css/getComputedStyle-border-spacing.html +/sdcard/android/layout_tests/fast/css/font-face-descriptor-multiple-values-parsing.html /sdcard/android/layout_tests/fast/css/hexColor-isDigit-assert.html +/sdcard/android/layout_tests/fast/css/transform-inline-style.html +/sdcard/android/layout_tests/fast/css/child-selector-implicit-tbody.html +/sdcard/android/layout_tests/fast/css/outline-hidden-illegal-value.html +/sdcard/android/layout_tests/fast/css/emptyStyleTag.html +/sdcard/android/layout_tests/fast/css/stale-style-selector-crash-1.html +/sdcard/android/layout_tests/fast/css/getComputedStyle-background-size.html +/sdcard/android/layout_tests/fast/css/display-none-inline-style-change-crash.html /sdcard/android/layout_tests/fast/css/getPropertyValue-clip.html +/sdcard/android/layout_tests/fast/css/border-image-crash.html +/sdcard/android/layout_tests/fast/css/getComputedStyle-border-box.html +/sdcard/android/layout_tests/fast/css/readonly-pseudoclass-opera-005.html +/sdcard/android/layout_tests/fast/css/insertRule-media.html +/sdcard/android/layout_tests/fast/css/font-face-multiple-families.html /sdcard/android/layout_tests/fast/css/getPropertyValue-border.html -/sdcard/android/layout_tests/fast/css/getComputedStyle-zIndex-auto.html +/sdcard/android/layout_tests/fast/css/readonly-pseudoclass-opera-002.html +/sdcard/android/layout_tests/fast/css/invalid-rule-value.html +/sdcard/android/layout_tests/fast/css/max-device-aspect-ratio.html +/sdcard/android/layout_tests/fast/css/background-currentcolor.html +/sdcard/android/layout_tests/fast/css/orphaned_units_crash.html /sdcard/android/layout_tests/fast/css/getComputedStyle-relayout.html +/sdcard/android/layout_tests/fast/css/invalid-cursor-property-crash.html /sdcard/android/layout_tests/fast/css/getComputedStyle-borderRadius.html -/sdcard/android/layout_tests/fast/css/getComputedStyle-border-spacing.html -/sdcard/android/layout_tests/fast/css/getComputedStyle-border-image.html -/sdcard/android/layout_tests/fast/css/getComputedStyle-border-box.html -/sdcard/android/layout_tests/fast/css/getComputedStyle-background-size.html +/sdcard/android/layout_tests/fast/css/sheet-title.html +/sdcard/android/layout_tests/fast/css/background-position-serialize.html /sdcard/android/layout_tests/fast/css/getComputedStyle-background-position.html -/sdcard/android/layout_tests/fast/css/font-property-priority.html -/sdcard/android/layout_tests/fast/css/font-family-initial.html -/sdcard/android/layout_tests/fast/css/font-face-multiple-families.html -/sdcard/android/layout_tests/fast/css/font-face-descriptor-multiple-values-parsing.html -/sdcard/android/layout_tests/fast/css/emptyStyleTag.html -/sdcard/android/layout_tests/fast/css/empty-script.html -/sdcard/android/layout_tests/fast/css/display-none-inline-style-change-crash.html -/sdcard/android/layout_tests/fast/css/device-aspect-ratio.html -/sdcard/android/layout_tests/fast/css/dashboard-regions-attr-crash.html +/sdcard/android/layout_tests/fast/css/stale-style-selector-crash-2.html +/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/css-selector-text.html -/sdcard/android/layout_tests/fast/css/css-properties-case-insensitive.html -/sdcard/android/layout_tests/fast/css/computed-style-negative-top.html -/sdcard/android/layout_tests/fast/css/computed-style-display-none.html -/sdcard/android/layout_tests/fast/css/child-selector-implicit-tbody.html -/sdcard/android/layout_tests/fast/css/case-transform.html -/sdcard/android/layout_tests/fast/css/border-image-crash.html -/sdcard/android/layout_tests/fast/css/background-position-serialize.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/background-currentcolor.html -/sdcard/android/layout_tests/fast/cookies/local-file-can-set-cookies.html -/sdcard/android/layout_tests/fast/canvas/unclosed-canvas-4.html -/sdcard/android/layout_tests/fast/canvas/unclosed-canvas-3.html -/sdcard/android/layout_tests/fast/canvas/unclosed-canvas-2.html -/sdcard/android/layout_tests/fast/canvas/unclosed-canvas-1.html -/sdcard/android/layout_tests/fast/canvas/toDataURL-noData.html -/sdcard/android/layout_tests/fast/canvas/script-inside-canvas-fallback.html -/sdcard/android/layout_tests/fast/canvas/radialGradient-infinite-values.html -/sdcard/android/layout_tests/fast/canvas/pointInPath.html -/sdcard/android/layout_tests/fast/canvas/linearGradient-infinite-values.html +/sdcard/android/layout_tests/fast/css/readonly-pseudoclass-opera-003.html +/sdcard/android/layout_tests/fast/css/overflow-property.html +/sdcard/android/layout_tests/fast/css/remove-shorthand.html +/sdcard/android/layout_tests/fast/css/getComputedStyle-zIndex-auto.html +/sdcard/android/layout_tests/fast/css/min-device-aspect-ratio.html +/sdcard/android/layout_tests/fast/css/case-transform.html +/sdcard/android/layout_tests/fast/css/nested-rule-parent-sheet.html +/sdcard/android/layout_tests/fast/css/font-family-initial.html +/sdcard/android/layout_tests/fast/css/computed-style-display-none.html +/sdcard/android/layout_tests/fast/css/small-caps-crash.html +/sdcard/android/layout_tests/fast/css/max-height-and-max-width.html +/sdcard/android/layout_tests/fast/css/legacy-opacity-styles.html +/sdcard/android/layout_tests/fast/css/transition-timing-function.html +/sdcard/android/layout_tests/fast/parser/remove-node-stack.html +/sdcard/android/layout_tests/fast/parser/remove-current-node-parent.html +/sdcard/android/layout_tests/fast/parser/entity-end-iframe-tag.html +/sdcard/android/layout_tests/fast/parser/nsup-entity.html +/sdcard/android/layout_tests/fast/parser/parse-wbr.html +/sdcard/android/layout_tests/fast/parser/residual-style-close-across-n-blocks.html +/sdcard/android/layout_tests/fast/parser/open-comment-in-script-tricky.html +/sdcard/android/layout_tests/fast/parser/tag-with-exclamation-point.html +/sdcard/android/layout_tests/fast/parser/p-in-scope-strict.html +/sdcard/android/layout_tests/fast/parser/hex-entities-length.html +/sdcard/android/layout_tests/fast/parser/entity-end-style-tag.html +/sdcard/android/layout_tests/fast/parser/entity-end-xmp-tag.html +/sdcard/android/layout_tests/fast/parser/html-whitespace.html +/sdcard/android/layout_tests/fast/parser/head-comment.html +/sdcard/android/layout_tests/fast/parser/test-unicode-characters-in-attribute-name.html +/sdcard/android/layout_tests/fast/parser/entity-end-textarea-tag.html +/sdcard/android/layout_tests/fast/parser/script-after-frameset-assert.html +/sdcard/android/layout_tests/fast/parser/duplicate-html-body-element-IDs.html +/sdcard/android/layout_tests/fast/parser/comment-in-title.html +/sdcard/android/layout_tests/fast/parser/residual-style-close-across-removed-block.html +/sdcard/android/layout_tests/fast/parser/entity-comment-in-title.html +/sdcard/android/layout_tests/fast/parser/assertion-empty-attribute.html +/sdcard/android/layout_tests/fast/parser/entity-end-title-tag.html +/sdcard/android/layout_tests/fast/parser/comment-in-script-tricky.html +/sdcard/android/layout_tests/fast/parser/pre-first-line-break.html +/sdcard/android/layout_tests/fast/parser/rewrite-form.html +/sdcard/android/layout_tests/fast/parser/number-sign-in-map-name.html +/sdcard/android/layout_tests/fast/parser/entity-comment-in-script-tricky.html +/sdcard/android/layout_tests/fast/parser/input-textarea-inside-select-element.html +/sdcard/android/layout_tests/fast/parser/entities-in-html.html +/sdcard/android/layout_tests/fast/parser/remove-parser-current-node.html +/sdcard/android/layout_tests/fast/parser/area-in-div.html +/sdcard/android/layout_tests/fast/parser/rewrite-map.html +/sdcard/android/layout_tests/fast/parser/entity-surrogate-pairs.html +/sdcard/android/layout_tests/fast/parser/strict-img-in-map.html +/sdcard/android/layout_tests/fast/parser/p-in-scope.html +/sdcard/android/layout_tests/fast/layers/removed-by-scroll-handler.html +/sdcard/android/layout_tests/fast/layers/generated-layer-scrollbar-crash.html +/sdcard/android/layout_tests/fast/layers/resize-layer-deletion-crash.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/xmlhttprequest-bad-mimetype.html +/sdcard/android/layout_tests/fast/loader/local-css-allowed-in-strict-mode.html +/sdcard/android/layout_tests/fast/loader/user-style-sheet-resource-load-callbacks.html +/sdcard/android/layout_tests/fast/loader/url-strip-cr-lf-tab.html +/sdcard/android/layout_tests/fast/loader/unloadable-script.html +/sdcard/android/layout_tests/fast/loader/url-parse-1.html +/sdcard/android/layout_tests/fast/loader/redirect-with-open-subframe-2.html +/sdcard/android/layout_tests/fast/loader/simultaneous-reloads-assert.html +/sdcard/android/layout_tests/fast/loader/invalid-charset-on-script-crashes-loader.html +/sdcard/android/layout_tests/fast/loader/javascript-url-encoding.html +/sdcard/android/layout_tests/fast/loader/charset-parse.html +/sdcard/android/layout_tests/fast/loader/meta-refresh-vs-open.html +/sdcard/android/layout_tests/fast/loader/url-data-replace-backslash.html +/sdcard/android/layout_tests/fast/loader/redirect-with-open-subframe.html +/sdcard/android/layout_tests/fast/loader/empty-ref-versus-no-ref.html +/sdcard/android/layout_tests/fast/loader/window-clearing.html +/sdcard/android/layout_tests/fast/loader/javascript-url-encoding-2.html +/sdcard/android/layout_tests/fast/loader/external-script-URL-location.html +/sdcard/android/layout_tests/fast/loader/loadInProgress.html +/sdcard/android/layout_tests/fast/loader/inherit-charset-to-empty-frame.html +/sdcard/android/layout_tests/fast/loader/font-face-empty.html +/sdcard/android/layout_tests/fast/loader/data-url-encoding-html.html +/sdcard/android/layout_tests/fast/loader/file-URL-with-port-number.html +/sdcard/android/layout_tests/fast/loader/link-no-URL.html /sdcard/android/layout_tests/fast/canvas/pattern-with-transform.html -/sdcard/android/layout_tests/fast/canvas/gradient-with-clip.html /sdcard/android/layout_tests/fast/canvas/gradient-addColorStop-with-invalid-color.html +/sdcard/android/layout_tests/fast/canvas/canvas-gradient-without-path.html +/sdcard/android/layout_tests/fast/canvas/canvas-pattern-behaviour.html +/sdcard/android/layout_tests/fast/canvas/radialGradient-infinite-values.html /sdcard/android/layout_tests/fast/canvas/drawImage-with-negative-source-destination.html /sdcard/android/layout_tests/fast/canvas/drawImage-with-invalid-args.html +/sdcard/android/layout_tests/fast/canvas/canvas-stroke-empty-fill.html +/sdcard/android/layout_tests/fast/canvas/access-zero-sized-canvas.html +/sdcard/android/layout_tests/fast/canvas/script-inside-canvas-fallback.html +/sdcard/android/layout_tests/fast/canvas/unclosed-canvas-2.html /sdcard/android/layout_tests/fast/canvas/create-pattern-does-not-crash.html -/sdcard/android/layout_tests/fast/canvas/canvas-with-incorrect-args.html +/sdcard/android/layout_tests/fast/canvas/gradient-with-clip.html +/sdcard/android/layout_tests/fast/canvas/canvas-hides-fallback.html +/sdcard/android/layout_tests/fast/canvas/arc-crash.html +/sdcard/android/layout_tests/fast/canvas/canvas-ImageData-behaviour.html /sdcard/android/layout_tests/fast/canvas/canvas-putImageData.html -/sdcard/android/layout_tests/fast/canvas/canvas-pattern-behaviour.html +/sdcard/android/layout_tests/fast/canvas/unclosed-canvas-4.html +/sdcard/android/layout_tests/fast/canvas/canvas-invalid-fillstyle.html +/sdcard/android/layout_tests/fast/canvas/unclosed-canvas-1.html +/sdcard/android/layout_tests/fast/canvas/toDataURL-noData.html +/sdcard/android/layout_tests/fast/canvas/canvas-with-incorrect-args.html /sdcard/android/layout_tests/fast/canvas/canvas-path-with-inf-nan-dimensions.html +/sdcard/android/layout_tests/fast/canvas/canvas-radial-gradient-spreadMethod.html +/sdcard/android/layout_tests/fast/canvas/canvas-set-properties-with-non-invertible-ctm.html /sdcard/android/layout_tests/fast/canvas/canvas-invalid-strokestyle.html -/sdcard/android/layout_tests/fast/canvas/canvas-invalid-fillstyle.html -/sdcard/android/layout_tests/fast/canvas/canvas-ImageData-behaviour.html -/sdcard/android/layout_tests/fast/canvas/canvas-hides-fallback.html -/sdcard/android/layout_tests/fast/canvas/arc-crash.html -/sdcard/android/layout_tests/fast/canvas/access-zero-sized-canvas.html +/sdcard/android/layout_tests/fast/canvas/canvas-strokeRect.html +/sdcard/android/layout_tests/fast/canvas/canvas-pattern-transform.html +/sdcard/android/layout_tests/fast/canvas/canvas-transparency-and-composite.html +/sdcard/android/layout_tests/fast/canvas/unclosed-canvas-3.html +/sdcard/android/layout_tests/fast/canvas/linearGradient-infinite-values.html +/sdcard/android/layout_tests/fast/canvas/canvas-setTransform.html +/sdcard/android/layout_tests/fast/frames/frame-set-same-location.html +/sdcard/android/layout_tests/fast/frames/set-unloaded-frame-location.html +/sdcard/android/layout_tests/fast/frames/negative-remaining-length-crash.html +/sdcard/android/layout_tests/fast/frames/frame-name-reset.html +/sdcard/android/layout_tests/fast/frames/frame-set-same-src.html +/sdcard/android/layout_tests/fast/frames/crash-removed-iframe.html +/sdcard/android/layout_tests/fast/frames/empty-frame-document.html +/sdcard/android/layout_tests/fast/frames/viewsource-plain-text-tags.html +/sdcard/android/layout_tests/fast/frames/location-put-after-removal.html +/sdcard/android/layout_tests/fast/frames/repaint-display-none-crash.html +/sdcard/android/layout_tests/fast/frames/remove-frame-with-scrollbars-crash.html +/sdcard/android/layout_tests/fast/frames/cross-site-this.html +/sdcard/android/layout_tests/fast/frames/onload-remove-iframe-crash.html +/sdcard/android/layout_tests/fast/frames/iframe-set-inner-html.html +/sdcard/android/layout_tests/fast/frames/iframe-remove-after-id-change.html +/sdcard/android/layout_tests/fast/frames/iframe-target.html +/sdcard/android/layout_tests/fast/frames/hover-timer-crash.html +/sdcard/android/layout_tests/fast/frames/iframe-set-same-src.html +/sdcard/android/layout_tests/fast/frames/iframe-double-attach.html +/sdcard/android/layout_tests/fast/frames/iframe-set-same-location.html +/sdcard/android/layout_tests/fast/frames/iframe-js-url-clientWidth.html +/sdcard/android/layout_tests/fast/frames/location-change.html +/sdcard/android/layout_tests/fast/frames/frame-base-url.html +/sdcard/android/layout_tests/fast/frames/iframe-display-none.html +/sdcard/android/layout_tests/fast/frames/frame-display-none-focus.html +/sdcard/android/layout_tests/fast/reflections/teardown-crash.html +/sdcard/android/layout_tests/fast/reflections/reflection-computed-style.html diff --git a/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java b/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java index e1a0e7d..264fcdd 100644 --- a/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java +++ b/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java @@ -21,6 +21,7 @@ import android.app.PendingIntent; import android.widget.ArrayAdapter; import android.view.View; import android.widget.ListView; +import android.content.ContentResolver; import android.content.Intent; import android.app.Notification; import android.app.NotificationManager; @@ -188,7 +189,8 @@ public class NotificationTestList extends TestActivity { Notification n = new Notification(); n.sound = Uri.parse( - "android.resource://com.android.notificationtest/raw/ringer"); + ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + + getPackageName() + "/raw/ringer"); Log.d(TAG, "n.sound=" + n.sound); mNM.notify(1, n); diff --git a/tools/aapt/Images.cpp b/tools/aapt/Images.cpp index edb12ea..0a4c68b 100644 --- a/tools/aapt/Images.cpp +++ b/tools/aapt/Images.cpp @@ -332,8 +332,8 @@ static status_t do_9patch(const char* imageName, image_info* image) int H = image->height; int i, j; - int maxSizeXDivs = (W / 2 + 1) * sizeof(int32_t); - int maxSizeYDivs = (H / 2 + 1) * sizeof(int32_t); + int maxSizeXDivs = W * sizeof(int32_t); + int maxSizeYDivs = H * sizeof(int32_t); int32_t* xDivs = (int32_t*) malloc(maxSizeXDivs); int32_t* yDivs = (int32_t*) malloc(maxSizeYDivs); uint8_t numXDivs = 0; diff --git a/tools/aidl/aidl.cpp b/tools/aidl/aidl.cpp index dc61567..e248763 100644 --- a/tools/aidl/aidl.cpp +++ b/tools/aidl/aidl.cpp @@ -617,7 +617,7 @@ parse_preprocessed_file(const string& filename) FILE* f = fopen(filename.c_str(), "rb"); if (f == NULL) { - fprintf(stderr, "aidl: can't open preprocessd file: %s\n", + fprintf(stderr, "aidl: can't open preprocessed file: %s\n", filename.c_str()); return 1; } diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java index 6abc452d..47a7ec0 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java @@ -56,6 +56,7 @@ import android.view.View.MeasureSpec; import android.view.WindowManager.LayoutParams; import android.widget.FrameLayout; +import java.lang.ref.SoftReference; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.Collection; @@ -94,14 +95,15 @@ public final class Bridge implements ILayoutBridge { private final static Map<String, Map<String, Integer>> sRFullMap = new HashMap<String, Map<String,Integer>>(); - private final static Map<Object, Map<String, Bitmap>> sProjectBitmapCache = - new HashMap<Object, Map<String, Bitmap>>(); - private final static Map<Object, Map<String, NinePatch>> sProject9PatchCache = - new HashMap<Object, Map<String, NinePatch>>(); - - private final static Map<String, Bitmap> sFrameworkBitmapCache = new HashMap<String, Bitmap>(); - private final static Map<String, NinePatch> sFramework9PatchCache = - new HashMap<String, NinePatch>(); + private final static Map<Object, Map<String, SoftReference<Bitmap>>> sProjectBitmapCache = + new HashMap<Object, Map<String, SoftReference<Bitmap>>>(); + private final static Map<Object, Map<String, SoftReference<NinePatch>>> sProject9PatchCache = + new HashMap<Object, Map<String, SoftReference<NinePatch>>>(); + + private final static Map<String, SoftReference<Bitmap>> sFrameworkBitmapCache = + new HashMap<String, SoftReference<Bitmap>>(); + private final static Map<String, SoftReference<NinePatch>> sFramework9PatchCache = + new HashMap<String, SoftReference<NinePatch>>(); private static Map<String, Map<String, Integer>> sEnumValueMap; @@ -717,15 +719,21 @@ public final class Bridge implements ILayoutBridge { */ static Bitmap getCachedBitmap(String value, Object projectKey) { if (projectKey != null) { - Map<String, Bitmap> map = sProjectBitmapCache.get(projectKey); + Map<String, SoftReference<Bitmap>> map = sProjectBitmapCache.get(projectKey); if (map != null) { - return map.get(value); + SoftReference<Bitmap> ref = map.get(value); + if (ref != null) { + return ref.get(); + } + } + } else { + SoftReference<Bitmap> ref = sFrameworkBitmapCache.get(value); + if (ref != null) { + return ref.get(); } - - return null; } - - return sFrameworkBitmapCache.get(value); + + return null; } /** @@ -736,17 +744,17 @@ public final class Bridge implements ILayoutBridge { */ static void setCachedBitmap(String value, Bitmap bmp, Object projectKey) { if (projectKey != null) { - Map<String, Bitmap> map = sProjectBitmapCache.get(projectKey); + Map<String, SoftReference<Bitmap>> map = sProjectBitmapCache.get(projectKey); if (map == null) { - map = new HashMap<String, Bitmap>(); + map = new HashMap<String, SoftReference<Bitmap>>(); sProjectBitmapCache.put(projectKey, map); } - map.put(value, bmp); + map.put(value, new SoftReference<Bitmap>(bmp)); + } else { + sFrameworkBitmapCache.put(value, new SoftReference<Bitmap>(bmp)); } - - sFrameworkBitmapCache.put(value, bmp); } /** @@ -758,16 +766,22 @@ public final class Bridge implements ILayoutBridge { */ static NinePatch getCached9Patch(String value, Object projectKey) { if (projectKey != null) { - Map<String, NinePatch> map = sProject9PatchCache.get(projectKey); + Map<String, SoftReference<NinePatch>> map = sProject9PatchCache.get(projectKey); if (map != null) { - return map.get(value); + SoftReference<NinePatch> ref = map.get(value); + if (ref != null) { + return ref.get(); + } + } + } else { + SoftReference<NinePatch> ref = sFramework9PatchCache.get(value); + if (ref != null) { + return ref.get(); } - - return null; } - return sFramework9PatchCache.get(value); + return null; } /** @@ -778,19 +792,19 @@ public final class Bridge implements ILayoutBridge { */ static void setCached9Patch(String value, NinePatch ninePatch, Object projectKey) { if (projectKey != null) { - Map<String, NinePatch> map = sProject9PatchCache.get(projectKey); + Map<String, SoftReference<NinePatch>> map = sProject9PatchCache.get(projectKey); if (map == null) { - map = new HashMap<String, NinePatch>(); + map = new HashMap<String, SoftReference<NinePatch>>(); sProject9PatchCache.put(projectKey, map); } - map.put(value, ninePatch); + map.put(value, new SoftReference<NinePatch>(ninePatch)); + } else { + sFramework9PatchCache.put(value, new SoftReference<NinePatch>(ninePatch)); } - - sFramework9PatchCache.put(value, ninePatch); } - + /** * Implementation of {@link IWindowSession} so that mSession is not null in * the {@link SurfaceView}. |