Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.content.browser.webcontents; | 5 package org.chromium.content.browser.webcontents; |
| 6 | 6 |
| 7 import android.annotation.SuppressLint; | 7 import android.annotation.SuppressLint; |
| 8 import android.content.Intent; | 8 import android.content.Intent; |
| 9 import android.os.Bundle; | 9 import android.os.Bundle; |
| 10 import android.os.Parcel; | 10 import android.os.Parcel; |
| 11 import android.support.test.filters.SmallTest; | 11 import android.support.test.filters.SmallTest; |
| 12 | 12 |
| 13 import org.junit.Assert; | |
| 14 import org.junit.Rule; | |
| 15 import org.junit.Test; | |
| 16 import org.junit.runner.RunWith; | |
| 17 | |
| 13 import org.chromium.base.ThreadUtils; | 18 import org.chromium.base.ThreadUtils; |
| 19 import org.chromium.base.test.BaseJUnit4ClassRunner; | |
| 14 import org.chromium.content_public.browser.RenderFrameHost; | 20 import org.chromium.content_public.browser.RenderFrameHost; |
| 15 import org.chromium.content_public.browser.WebContents; | 21 import org.chromium.content_public.browser.WebContents; |
| 16 import org.chromium.content_shell.Shell; | 22 import org.chromium.content_shell.Shell; |
| 17 import org.chromium.content_shell_apk.ContentShellActivity; | 23 import org.chromium.content_shell_apk.ContentShellActivity; |
| 18 import org.chromium.content_shell_apk.ContentShellTestBase; | 24 import org.chromium.content_shell_apk.ContentShellActivityTestRule; |
| 19 | 25 |
| 20 import java.util.concurrent.Callable; | 26 import java.util.concurrent.Callable; |
| 21 import java.util.concurrent.ExecutionException; | 27 import java.util.concurrent.ExecutionException; |
| 22 | 28 |
| 23 /** | 29 /** |
| 24 * Test various Java WebContents specific features. | 30 * Test various Java WebContents specific features. |
| 25 * TODO(dtrainor): Add more testing for the WebContents methods. | 31 * TODO(dtrainor): Add more testing for the WebContents methods. |
| 26 */ | 32 */ |
| 27 public class WebContentsTest extends ContentShellTestBase { | 33 @RunWith(BaseJUnit4ClassRunner.class) |
| 34 public class WebContentsTest { | |
| 35 @Rule | |
| 36 public ContentShellActivityTestRule mActivityTestRule = new ContentShellActi vityTestRule(); | |
| 37 | |
| 28 private static final String TEST_URL_1 = "about://blank"; | 38 private static final String TEST_URL_1 = "about://blank"; |
| 29 private static final String WEB_CONTENTS_KEY = "WEBCONTENTSKEY"; | 39 private static final String WEB_CONTENTS_KEY = "WEBCONTENTSKEY"; |
| 30 private static final String PARCEL_STRING_TEST_DATA = "abcdefghijklmnopqrstu vwxyz"; | 40 private static final String PARCEL_STRING_TEST_DATA = "abcdefghijklmnopqrstu vwxyz"; |
| 31 | 41 |
| 32 /** | 42 /** |
| 33 * Check that {@link WebContents#isDestroyed()} works as expected. | 43 * Check that {@link WebContents#isDestroyed()} works as expected. |
| 34 * TODO(dtrainor): Test this using {@link WebContents#destroy()} instead onc e it is possible to | 44 * TODO(dtrainor): Test this using {@link WebContents#destroy()} instead onc e it is possible to |
| 35 * build a {@link WebContents} directly in the content/ layer. | 45 * build a {@link WebContents} directly in the content/ layer. |
| 36 * | 46 * |
| 37 * @throws InterruptedException | 47 * @throws InterruptedException |
| 38 * @throws ExecutionException | 48 * @throws ExecutionException |
| 39 */ | 49 */ |
| 50 @Test | |
| 40 @SmallTest | 51 @SmallTest |
| 41 public void testWebContentsIsDestroyedMethod() throws InterruptedException, ExecutionException { | 52 public void testWebContentsIsDestroyedMethod() throws InterruptedException, ExecutionException { |
| 42 final ContentShellActivity activity = launchContentShellWithUrl(TEST_URL _1); | 53 final ContentShellActivity activity = |
| 43 waitForActiveShellToBeDoneLoading(); | 54 mActivityTestRule.launchContentShellWithUrl(TEST_URL_1); |
| 55 mActivityTestRule.waitForActiveShellToBeDoneLoading(); | |
| 44 WebContents webContents = activity.getActiveWebContents(); | 56 WebContents webContents = activity.getActiveWebContents(); |
| 45 | 57 |
| 46 assertFalse("WebContents incorrectly marked as destroyed", | 58 Assert.assertFalse( |
| 47 isWebContentsDestroyed(webContents)); | 59 "WebContents incorrectly marked as destroyed", isWebContentsDest royed(webContents)); |
| 48 | 60 |
| 49 // Launch a new shell. | 61 // Launch a new shell. |
| 50 Shell originalShell = activity.getActiveShell(); | 62 Shell originalShell = activity.getActiveShell(); |
| 51 loadNewShell(TEST_URL_1); | 63 mActivityTestRule.loadNewShell(TEST_URL_1); |
| 52 assertNotSame("New shell not created", activity.getActiveShell(), origin alShell); | 64 Assert.assertNotSame("New shell not created", activity.getActiveShell(), originalShell); |
| 53 | 65 |
| 54 assertTrue("WebContents incorrectly marked as not destroyed", | 66 Assert.assertTrue("WebContents incorrectly marked as not destroyed", |
| 55 isWebContentsDestroyed(webContents)); | 67 isWebContentsDestroyed(webContents)); |
| 56 } | 68 } |
| 57 | 69 |
| 58 /** | 70 /** |
| 59 * Check that it is possible to serialize and deserialize a WebContents obje ct through Parcels. | 71 * Check that it is possible to serialize and deserialize a WebContents obje ct through Parcels. |
| 60 * | 72 * |
| 61 * @throws InterruptedException | 73 * @throws InterruptedException |
| 62 */ | 74 */ |
| 75 @Test | |
| 63 @SmallTest | 76 @SmallTest |
| 64 public void testWebContentsSerializeDeserializeInParcel() throws Interrupted Exception { | 77 public void testWebContentsSerializeDeserializeInParcel() throws Interrupted Exception { |
| 65 launchContentShellWithUrl(TEST_URL_1); | 78 mActivityTestRule.launchContentShellWithUrl(TEST_URL_1); |
| 66 waitForActiveShellToBeDoneLoading(); | 79 mActivityTestRule.waitForActiveShellToBeDoneLoading(); |
| 67 WebContents webContents = getWebContents(); | 80 WebContents webContents = mActivityTestRule.getWebContents(); |
| 68 | 81 |
| 69 Parcel parcel = Parcel.obtain(); | 82 Parcel parcel = Parcel.obtain(); |
| 70 | 83 |
| 71 try { | 84 try { |
| 72 // Serialize the WebContents. | 85 // Serialize the WebContents. |
| 73 parcel.writeParcelable(webContents, 0); | 86 parcel.writeParcelable(webContents, 0); |
| 74 | 87 |
| 75 // Read back the WebContents. | 88 // Read back the WebContents. |
| 76 parcel.setDataPosition(0); | 89 parcel.setDataPosition(0); |
| 77 WebContents deserializedWebContents = parcel.readParcelable( | 90 WebContents deserializedWebContents = parcel.readParcelable( |
| 78 WebContents.class.getClassLoader()); | 91 WebContents.class.getClassLoader()); |
| 79 | 92 |
| 80 // Make sure they're equal. | 93 // Make sure they're equal. |
| 81 assertEquals("Deserialized object does not match", | 94 Assert.assertEquals( |
| 82 webContents, deserializedWebContents); | 95 "Deserialized object does not match", webContents, deseriali zedWebContents); |
| 83 } finally { | 96 } finally { |
| 84 parcel.recycle(); | 97 parcel.recycle(); |
| 85 } | 98 } |
| 86 } | 99 } |
| 87 | 100 |
| 88 /** | 101 /** |
| 89 * Check that it is possible to serialize and deserialize a WebContents obje ct through Bundles. | 102 * Check that it is possible to serialize and deserialize a WebContents obje ct through Bundles. |
| 90 * @throws InterruptedException | 103 * @throws InterruptedException |
| 91 */ | 104 */ |
| 105 @Test | |
| 92 @SmallTest | 106 @SmallTest |
| 93 // TODO(crbug.com/635567): Fix this properly. | 107 // TODO(crbug.com/635567): Fix this properly. |
| 94 @SuppressLint("ParcelClassLoader") | 108 @SuppressLint("ParcelClassLoader") |
| 95 public void testWebContentsSerializeDeserializeInBundle() throws Interrupted Exception { | 109 public void testWebContentsSerializeDeserializeInBundle() throws Interrupted Exception { |
| 96 launchContentShellWithUrl(TEST_URL_1); | 110 mActivityTestRule.launchContentShellWithUrl(TEST_URL_1); |
| 97 waitForActiveShellToBeDoneLoading(); | 111 mActivityTestRule.waitForActiveShellToBeDoneLoading(); |
| 98 WebContents webContents = getWebContents(); | 112 WebContents webContents = mActivityTestRule.getWebContents(); |
| 99 | 113 |
| 100 // Use a parcel to force the Bundle to actually serialize and deserializ e, otherwise it can | 114 // Use a parcel to force the Bundle to actually serialize and deserializ e, otherwise it can |
| 101 // cache the WebContents object. | 115 // cache the WebContents object. |
| 102 Parcel parcel = Parcel.obtain(); | 116 Parcel parcel = Parcel.obtain(); |
| 103 | 117 |
| 104 try { | 118 try { |
| 105 // Create a bundle and put the WebContents in it. | 119 // Create a bundle and put the WebContents in it. |
| 106 Bundle bundle = new Bundle(); | 120 Bundle bundle = new Bundle(); |
| 107 bundle.putParcelable(WEB_CONTENTS_KEY, webContents); | 121 bundle.putParcelable(WEB_CONTENTS_KEY, webContents); |
| 108 | 122 |
| 109 // Serialize the Bundle. | 123 // Serialize the Bundle. |
| 110 parcel.writeBundle(bundle); | 124 parcel.writeBundle(bundle); |
| 111 | 125 |
| 112 // Read back the Bundle. | 126 // Read back the Bundle. |
| 113 parcel.setDataPosition(0); | 127 parcel.setDataPosition(0); |
| 114 Bundle deserializedBundle = parcel.readBundle(); | 128 Bundle deserializedBundle = parcel.readBundle(); |
| 115 | 129 |
| 116 // Read back the WebContents. | 130 // Read back the WebContents. |
| 117 deserializedBundle.setClassLoader(WebContents.class.getClassLoader() ); | 131 deserializedBundle.setClassLoader(WebContents.class.getClassLoader() ); |
| 118 WebContents deserializedWebContents = | 132 WebContents deserializedWebContents = |
| 119 deserializedBundle.getParcelable(WEB_CONTENTS_KEY); | 133 deserializedBundle.getParcelable(WEB_CONTENTS_KEY); |
| 120 | 134 |
| 121 // Make sure they're equal. | 135 // Make sure they're equal. |
| 122 assertEquals("Deserialized object does not match", | 136 Assert.assertEquals( |
| 123 webContents, deserializedWebContents); | 137 "Deserialized object does not match", webContents, deseriali zedWebContents); |
| 124 } finally { | 138 } finally { |
| 125 parcel.recycle(); | 139 parcel.recycle(); |
| 126 } | 140 } |
| 127 } | 141 } |
| 128 | 142 |
| 129 /** | 143 /** |
| 130 * Check that it is possible to serialize and deserialize a WebContents obje ct through Intents. | 144 * Check that it is possible to serialize and deserialize a WebContents obje ct through Intents. |
| 131 * @throws InterruptedException | 145 * @throws InterruptedException |
| 132 */ | 146 */ |
| 147 @Test | |
| 133 @SmallTest | 148 @SmallTest |
| 134 // TODO(crbug.com/635567): Fix this properly. | 149 // TODO(crbug.com/635567): Fix this properly. |
| 135 @SuppressLint("ParcelClassLoader") | 150 @SuppressLint("ParcelClassLoader") |
| 136 public void testWebContentsSerializeDeserializeInIntent() throws Interrupted Exception { | 151 public void testWebContentsSerializeDeserializeInIntent() throws Interrupted Exception { |
| 137 launchContentShellWithUrl(TEST_URL_1); | 152 mActivityTestRule.launchContentShellWithUrl(TEST_URL_1); |
| 138 waitForActiveShellToBeDoneLoading(); | 153 mActivityTestRule.waitForActiveShellToBeDoneLoading(); |
| 139 WebContents webContents = getWebContents(); | 154 WebContents webContents = mActivityTestRule.getWebContents(); |
| 140 | 155 |
| 141 // Use a parcel to force the Intent to actually serialize and deserializ e, otherwise it can | 156 // Use a parcel to force the Intent to actually serialize and deserializ e, otherwise it can |
| 142 // cache the WebContents object. | 157 // cache the WebContents object. |
| 143 Parcel parcel = Parcel.obtain(); | 158 Parcel parcel = Parcel.obtain(); |
| 144 | 159 |
| 145 try { | 160 try { |
| 146 // Create an Intent and put the WebContents in it. | 161 // Create an Intent and put the WebContents in it. |
| 147 Intent intent = new Intent(); | 162 Intent intent = new Intent(); |
| 148 intent.putExtra(WEB_CONTENTS_KEY, webContents); | 163 intent.putExtra(WEB_CONTENTS_KEY, webContents); |
| 149 | 164 |
| 150 // Serialize the Intent | 165 // Serialize the Intent |
| 151 parcel.writeParcelable(intent, 0); | 166 parcel.writeParcelable(intent, 0); |
| 152 | 167 |
| 153 // Read back the Intent. | 168 // Read back the Intent. |
| 154 parcel.setDataPosition(0); | 169 parcel.setDataPosition(0); |
| 155 Intent deserializedIntent = parcel.readParcelable(null); | 170 Intent deserializedIntent = parcel.readParcelable(null); |
| 156 | 171 |
| 157 // Read back the WebContents. | 172 // Read back the WebContents. |
| 158 deserializedIntent.setExtrasClassLoader(WebContents.class.getClassLo ader()); | 173 deserializedIntent.setExtrasClassLoader(WebContents.class.getClassLo ader()); |
| 159 WebContents deserializedWebContents = | 174 WebContents deserializedWebContents = |
| 160 (WebContents) deserializedIntent.getParcelableExtra(WEB_CONT ENTS_KEY); | 175 (WebContents) deserializedIntent.getParcelableExtra(WEB_CONT ENTS_KEY); |
| 161 | 176 |
| 162 // Make sure they're equal. | 177 // Make sure they're equal. |
| 163 assertEquals("Deserialized object does not match", | 178 Assert.assertEquals( |
| 164 webContents, deserializedWebContents); | 179 "Deserialized object does not match", webContents, deseriali zedWebContents); |
| 165 } finally { | 180 } finally { |
| 166 parcel.recycle(); | 181 parcel.recycle(); |
| 167 } | 182 } |
| 168 } | 183 } |
| 169 | 184 |
| 170 /** | 185 /** |
| 171 * Check that attempting to deserialize a WebContents object from a Parcel f rom another process | 186 * Check that attempting to deserialize a WebContents object from a Parcel f rom another process |
| 172 * instance fails. | 187 * instance fails. |
| 173 * @throws InterruptedException | 188 * @throws InterruptedException |
| 174 */ | 189 */ |
| 190 @Test | |
| 175 @SmallTest | 191 @SmallTest |
| 176 public void testWebContentsFailDeserializationAcrossProcessBoundary() | 192 public void testWebContentsFailDeserializationAcrossProcessBoundary() |
| 177 throws InterruptedException { | 193 throws InterruptedException { |
| 178 launchContentShellWithUrl(TEST_URL_1); | 194 mActivityTestRule.launchContentShellWithUrl(TEST_URL_1); |
| 179 waitForActiveShellToBeDoneLoading(); | 195 mActivityTestRule.waitForActiveShellToBeDoneLoading(); |
| 180 WebContents webContents = getWebContents(); | 196 WebContents webContents = mActivityTestRule.getWebContents(); |
| 181 | 197 |
| 182 Parcel parcel = Parcel.obtain(); | 198 Parcel parcel = Parcel.obtain(); |
| 183 | 199 |
| 184 try { | 200 try { |
| 185 // Serialize the WebContents. | 201 // Serialize the WebContents. |
| 186 parcel.writeParcelable(webContents, 0); | 202 parcel.writeParcelable(webContents, 0); |
| 187 | 203 |
| 188 // Invalidate all serialized WebContents. | 204 // Invalidate all serialized WebContents. |
| 189 WebContentsImpl.invalidateSerializedWebContentsForTesting(); | 205 WebContentsImpl.invalidateSerializedWebContentsForTesting(); |
| 190 | 206 |
| 191 // Try to read back the WebContents. | 207 // Try to read back the WebContents. |
| 192 parcel.setDataPosition(0); | 208 parcel.setDataPosition(0); |
| 193 WebContents deserializedWebContents = parcel.readParcelable( | 209 WebContents deserializedWebContents = parcel.readParcelable( |
| 194 WebContents.class.getClassLoader()); | 210 WebContents.class.getClassLoader()); |
| 195 | 211 |
| 196 // Make sure we weren't able to deserialize the WebContents. | 212 // Make sure we weren't able to deserialize the WebContents. |
| 197 assertNull("Unexpectedly deserialized a WebContents", deserializedWe bContents); | 213 Assert.assertNull("Unexpectedly deserialized a WebContents", deseria lizedWebContents); |
| 198 } finally { | 214 } finally { |
| 199 parcel.recycle(); | 215 parcel.recycle(); |
| 200 } | 216 } |
| 201 } | 217 } |
| 202 | 218 |
| 203 /** | 219 /** |
| 204 * Check that serializing a destroyed WebContents always results in a null d eserialized | 220 * Check that serializing a destroyed WebContents always results in a null d eserialized |
| 205 * WebContents. | 221 * WebContents. |
| 206 * @throws InterruptedException | 222 * @throws InterruptedException |
| 207 * @throws ExecutionException | 223 * @throws ExecutionException |
| 208 */ | 224 */ |
| 225 @Test | |
| 209 @SmallTest | 226 @SmallTest |
| 210 public void testSerializingADestroyedWebContentsDoesNotDeserialize() | 227 public void testSerializingADestroyedWebContentsDoesNotDeserialize() |
| 211 throws InterruptedException, ExecutionException { | 228 throws InterruptedException, ExecutionException { |
| 212 ContentShellActivity activity = launchContentShellWithUrl(TEST_URL_1); | 229 ContentShellActivity activity = mActivityTestRule.launchContentShellWith Url(TEST_URL_1); |
| 213 waitForActiveShellToBeDoneLoading(); | 230 mActivityTestRule.waitForActiveShellToBeDoneLoading(); |
| 214 WebContents webContents = activity.getActiveWebContents(); | 231 WebContents webContents = activity.getActiveWebContents(); |
| 215 loadNewShell(TEST_URL_1); | 232 mActivityTestRule.loadNewShell(TEST_URL_1); |
| 216 | 233 |
| 217 assertTrue("WebContents not destroyed", isWebContentsDestroyed(webConten ts)); | 234 Assert.assertTrue("WebContents not destroyed", isWebContentsDestroyed(we bContents)); |
| 218 | 235 |
| 219 Parcel parcel = Parcel.obtain(); | 236 Parcel parcel = Parcel.obtain(); |
| 220 | 237 |
| 221 try { | 238 try { |
| 222 // Serialize the WebContents. | 239 // Serialize the WebContents. |
| 223 parcel.writeParcelable(webContents, 0); | 240 parcel.writeParcelable(webContents, 0); |
| 224 | 241 |
| 225 // Try to read back the WebContents. | 242 // Try to read back the WebContents. |
| 226 parcel.setDataPosition(0); | 243 parcel.setDataPosition(0); |
| 227 WebContents deserializedWebContents = parcel.readParcelable( | 244 WebContents deserializedWebContents = parcel.readParcelable( |
| 228 WebContents.class.getClassLoader()); | 245 WebContents.class.getClassLoader()); |
| 229 | 246 |
| 230 // Make sure we weren't able to deserialize the WebContents. | 247 // Make sure we weren't able to deserialize the WebContents. |
| 231 assertNull("Unexpectedly deserialized a destroyed WebContents", | 248 Assert.assertNull( |
| 232 deserializedWebContents); | 249 "Unexpectedly deserialized a destroyed WebContents", deseria lizedWebContents); |
| 233 } finally { | 250 } finally { |
| 234 parcel.recycle(); | 251 parcel.recycle(); |
| 235 } | 252 } |
| 236 } | 253 } |
| 237 | 254 |
| 238 /** | 255 /** |
| 239 * Check that destroying a WebContents after serializing it always results i n a null | 256 * Check that destroying a WebContents after serializing it always results i n a null |
| 240 * deserialized WebContents. | 257 * deserialized WebContents. |
| 241 * @throws InterruptedException | 258 * @throws InterruptedException |
| 242 * @throws ExecutionException | 259 * @throws ExecutionException |
| 243 */ | 260 */ |
| 261 @Test | |
| 244 @SmallTest | 262 @SmallTest |
| 245 public void testDestroyingAWebContentsAfterSerializingDoesNotDeserialize() | 263 public void testDestroyingAWebContentsAfterSerializingDoesNotDeserialize() |
| 246 throws InterruptedException, ExecutionException { | 264 throws InterruptedException, ExecutionException { |
| 247 ContentShellActivity activity = launchContentShellWithUrl(TEST_URL_1); | 265 ContentShellActivity activity = mActivityTestRule.launchContentShellWith Url(TEST_URL_1); |
| 248 waitForActiveShellToBeDoneLoading(); | 266 mActivityTestRule.waitForActiveShellToBeDoneLoading(); |
| 249 WebContents webContents = activity.getActiveWebContents(); | 267 WebContents webContents = activity.getActiveWebContents(); |
| 250 | 268 |
| 251 Parcel parcel = Parcel.obtain(); | 269 Parcel parcel = Parcel.obtain(); |
| 252 | 270 |
| 253 try { | 271 try { |
| 254 // Serialize the WebContents. | 272 // Serialize the WebContents. |
| 255 parcel.writeParcelable(webContents, 0); | 273 parcel.writeParcelable(webContents, 0); |
| 256 | 274 |
| 257 // Destroy the WebContents. | 275 // Destroy the WebContents. |
| 258 loadNewShell(TEST_URL_1); | 276 mActivityTestRule.loadNewShell(TEST_URL_1); |
| 259 assertTrue("WebContents not destroyed", isWebContentsDestroyed(webCo ntents)); | 277 Assert.assertTrue("WebContents not destroyed", isWebContentsDestroye d(webContents)); |
| 260 | 278 |
| 261 // Try to read back the WebContents. | 279 // Try to read back the WebContents. |
| 262 parcel.setDataPosition(0); | 280 parcel.setDataPosition(0); |
| 263 WebContents deserializedWebContents = parcel.readParcelable( | 281 WebContents deserializedWebContents = parcel.readParcelable( |
| 264 WebContents.class.getClassLoader()); | 282 WebContents.class.getClassLoader()); |
| 265 | 283 |
| 266 // Make sure we weren't able to deserialize the WebContents. | 284 // Make sure we weren't able to deserialize the WebContents. |
| 267 assertNull("Unexpectedly deserialized a destroyed WebContents", | 285 Assert.assertNull( |
| 268 deserializedWebContents); | 286 "Unexpectedly deserialized a destroyed WebContents", deseria lizedWebContents); |
| 269 } finally { | 287 } finally { |
| 270 parcel.recycle(); | 288 parcel.recycle(); |
| 271 } | 289 } |
| 272 } | 290 } |
| 273 | 291 |
| 274 /** | 292 /** |
| 275 * Check that failing a WebContents deserialization doesn't corrupt subseque nt data in the | 293 * Check that failing a WebContents deserialization doesn't corrupt subseque nt data in the |
| 276 * Parcel. | 294 * Parcel. |
| 277 * @throws InterruptedException | 295 * @throws InterruptedException |
| 278 */ | 296 */ |
| 297 @Test | |
| 279 @SmallTest | 298 @SmallTest |
| 280 public void testFailedDeserializationDoesntCorruptParcel() | 299 public void testFailedDeserializationDoesntCorruptParcel() throws Interrupte dException { |
| 281 throws InterruptedException { | 300 mActivityTestRule.launchContentShellWithUrl(TEST_URL_1); |
| 282 launchContentShellWithUrl(TEST_URL_1); | 301 mActivityTestRule.waitForActiveShellToBeDoneLoading(); |
| 283 waitForActiveShellToBeDoneLoading(); | 302 WebContents webContents = mActivityTestRule.getWebContents(); |
| 284 WebContents webContents = getWebContents(); | |
| 285 | 303 |
| 286 Parcel parcel = Parcel.obtain(); | 304 Parcel parcel = Parcel.obtain(); |
| 287 | 305 |
| 288 try { | 306 try { |
| 289 // Serialize the WebContents. | 307 // Serialize the WebContents. |
| 290 parcel.writeParcelable(webContents, 0); | 308 parcel.writeParcelable(webContents, 0); |
| 291 | 309 |
| 292 // Serialize a String after the WebContents. | 310 // Serialize a String after the WebContents. |
| 293 parcel.writeString(PARCEL_STRING_TEST_DATA); | 311 parcel.writeString(PARCEL_STRING_TEST_DATA); |
| 294 | 312 |
| 295 // Invalidate all serialized WebContents. | 313 // Invalidate all serialized WebContents. |
| 296 WebContentsImpl.invalidateSerializedWebContentsForTesting(); | 314 WebContentsImpl.invalidateSerializedWebContentsForTesting(); |
| 297 | 315 |
| 298 // Try to read back the WebContents. | 316 // Try to read back the WebContents. |
| 299 parcel.setDataPosition(0); | 317 parcel.setDataPosition(0); |
| 300 WebContents deserializedWebContents = parcel.readParcelable( | 318 WebContents deserializedWebContents = parcel.readParcelable( |
| 301 WebContents.class.getClassLoader()); | 319 WebContents.class.getClassLoader()); |
| 302 | 320 |
| 303 // Make sure we weren't able to deserialize the WebContents. | 321 // Make sure we weren't able to deserialize the WebContents. |
| 304 assertNull("Unexpectedly deserialized a WebContents", deserializedWe bContents); | 322 Assert.assertNull("Unexpectedly deserialized a WebContents", deseria lizedWebContents); |
| 305 | 323 |
| 306 // Make sure we can properly deserialize the String after the WebCon tents. | 324 // Make sure we can properly deserialize the String after the WebCon tents. |
| 307 assertEquals("Failing to read the WebContents corrupted the parcel", | 325 Assert.assertEquals("Failing to read the WebContents corrupted the p arcel", |
| 308 PARCEL_STRING_TEST_DATA, parcel.readString()); | 326 PARCEL_STRING_TEST_DATA, parcel.readString()); |
| 309 } finally { | 327 } finally { |
| 310 parcel.recycle(); | 328 parcel.recycle(); |
| 311 } | 329 } |
| 312 } | 330 } |
| 313 | 331 |
| 314 /** | 332 /** |
| 315 * Check that the main frame associated with the WebContents is not null | 333 * Check that the main frame associated with the WebContents is not null |
| 316 * and corresponds with the test URL. | 334 * and corresponds with the test URL. |
| 317 * | 335 * |
| 318 * @throws InterruptedException | 336 * @throws InterruptedException |
| 319 */ | 337 */ |
| 338 @Test | |
| 320 @SmallTest | 339 @SmallTest |
| 321 public void testWebContentsMainFrame() throws InterruptedException { | 340 public void testWebContentsMainFrame() throws InterruptedException { |
|
boliu
2017/03/10 18:32:32
this needs a rebase.. depending on timing of when
the real yoland
2017/03/10 19:31:58
Will do
boliu
2017/03/10 19:36:10
That CL just got cq-ed again, so guess you have to
| |
| 322 final ContentShellActivity activity = launchContentShellWithUrl(TEST_URL _1); | 341 final ContentShellActivity activity = |
| 323 waitForActiveShellToBeDoneLoading(); | 342 mActivityTestRule.launchContentShellWithUrl(TEST_URL_1); |
| 343 mActivityTestRule.waitForActiveShellToBeDoneLoading(); | |
| 324 final WebContents webContents = activity.getActiveWebContents(); | 344 final WebContents webContents = activity.getActiveWebContents(); |
| 325 | 345 |
| 326 ThreadUtils.postOnUiThread(new Runnable() { | 346 ThreadUtils.postOnUiThread(new Runnable() { |
| 327 @Override | 347 @Override |
| 328 public void run() { | 348 public void run() { |
| 329 RenderFrameHost frameHost = webContents.getMainFrame(); | 349 RenderFrameHost frameHost = webContents.getMainFrame(); |
| 330 | 350 |
| 331 assertNotNull(frameHost); | 351 Assert.assertNotNull(frameHost); |
| 332 | 352 |
| 333 assertEquals("RenderFrameHost has incorrect last committed URL", "about:blank", | 353 Assert.assertEquals("RenderFrameHost has incorrect last committe d URL", |
| 334 frameHost.getLastCommittedURL()); | 354 "about:blank", frameHost.getLastCommittedURL()); |
| 335 | 355 |
| 336 WebContents associatedWebContents = WebContentsImpl.fromRenderFr ameHost(frameHost); | 356 WebContents associatedWebContents = WebContentsImpl.fromRenderFr ameHost(frameHost); |
| 337 assertEquals("RenderFrameHost associated with different WebConte nts", webContents, | 357 Assert.assertEquals("RenderFrameHost associated with different W ebContents", |
| 338 associatedWebContents); | 358 webContents, associatedWebContents); |
| 339 } | 359 } |
| 340 }); | 360 }); |
| 341 } | 361 } |
| 342 | 362 |
| 343 private boolean isWebContentsDestroyed(final WebContents webContents) { | 363 private boolean isWebContentsDestroyed(final WebContents webContents) { |
| 344 return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Boolean >() { | 364 return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Boolean >() { |
| 345 @Override | 365 @Override |
| 346 public Boolean call() throws Exception { | 366 public Boolean call() throws Exception { |
| 347 return webContents.isDestroyed(); | 367 return webContents.isDestroyed(); |
| 348 } | 368 } |
| 349 }); | 369 }); |
| 350 } | 370 } |
| 351 } | 371 } |
| OLD | NEW |