1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Copyright (c) 2013-2014 Intel Corporation. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
6 package org.xwalk.core.internal.xwview.test;
8 import android.graphics.Bitmap;
9 import android.test.suitebuilder.annotation.SmallTest;
10 import android.webkit.WebResourceResponse;
12 import java.util.concurrent.atomic.AtomicReference;
14 import org.chromium.base.test.util.Feature;
15 import org.chromium.base.test.util.UrlUtils;
16 import org.xwalk.core.internal.XWalkClient;
17 import org.xwalk.core.internal.XWalkSettings;
18 import org.xwalk.core.internal.XWalkViewInternal;
19 import org.xwalk.core.internal.XWalkWebChromeClient;
22 * Test suite for setDomStorageEnabled().
24 public class SetDomStorageEnabledTest extends XWalkViewInternalTestBase {
25 private static final boolean ENABLED = true;
26 private static final boolean DISABLED = false;
28 abstract class XWalkViewSettingsTestHelper<T> {
29 protected final XWalkViewInternal mXWalkViewInternal;
30 protected final XWalkSettings mXWalkSettings;
32 XWalkViewSettingsTestHelper(XWalkViewInternal xWalkContent,
33 boolean requiresJsEnabled) throws Throwable {
34 mXWalkViewInternal = xWalkContent;
35 mXWalkSettings = getXWalkSettingsOnUiThreadByContent(xWalkContent);
36 mXWalkSettings.setDomStorageEnabled(false);
37 if (requiresJsEnabled) {
38 mXWalkSettings.setJavaScriptEnabled(true);
42 void ensureSettingHasAlteredValue() throws Throwable {
43 ensureSettingHasValue(getAlteredValue());
46 void ensureSettingHasInitialValue() throws Throwable {
47 ensureSettingHasValue(getInitialValue());
50 void setAlteredSettingValue() throws Throwable {
51 setCurrentValue(getAlteredValue());
54 void setInitialSettingValue() throws Throwable {
55 setCurrentValue(getInitialValue());
58 protected abstract T getAlteredValue();
60 protected abstract T getInitialValue();
62 protected abstract T getCurrentValue();
64 protected abstract void setCurrentValue(T value) throws Throwable;
66 protected abstract void doEnsureSettingHasValue(T value) throws Throwable;
68 private void ensureSettingHasValue(T value) throws Throwable {
69 assertEquals(value, getCurrentValue());
70 doEnsureSettingHasValue(value);
74 class XWalkViewSettingsDomStorageEnabledTestHelper extends XWalkViewSettingsTestHelper<Boolean> {
75 private static final String NO_LOCAL_STORAGE = "No localStorage";
76 private static final String HAS_LOCAL_STORAGE = "Has localStorage";
77 TestHelperBridge mHelperBridge;
79 XWalkViewSettingsDomStorageEnabledTestHelper(
80 XWalkViewInternal xWalkContent,
81 final TestHelperBridge helperBridge) throws Throwable {
82 super(xWalkContent, true);
83 mHelperBridge = helperBridge;
87 protected Boolean getAlteredValue() {
92 protected Boolean getInitialValue() {
97 protected Boolean getCurrentValue() {
98 return mXWalkSettings.getDomStorageEnabled();
102 protected void setCurrentValue(Boolean value) {
103 mXWalkSettings.setDomStorageEnabled(value);
107 protected void doEnsureSettingHasValue(Boolean value) throws Throwable {
108 // It is not permitted to access localStorage from data URLs in WebKit,
109 // that is why a standalone page must be used.
110 loadUrlSyncByContent(mXWalkViewInternal, mHelperBridge,
111 UrlUtils.getTestFileUrl("xwalkview/localStorage.html"));
113 value == ENABLED ? HAS_LOCAL_STORAGE : NO_LOCAL_STORAGE,
114 mHelperBridge.getChangedTitle());
119 * Verifies the following statements about a setting:
120 * - initially, the setting has a default value;
121 * - the setting can be switched to an alternate value and back;
122 * - switching a setting in the first XWalkViewInternal doesn't affect the setting
123 * state in the second XWalkViewInternal and vice versa.
125 * @param helper0 Test helper for the first ContentView
126 * @param helper1 Test helper for the second ContentView
129 private void runPerViewSettingsTest(XWalkViewSettingsTestHelper helper0,
130 XWalkViewSettingsTestHelper helper1) throws Throwable {
131 helper0.ensureSettingHasInitialValue();
132 helper1.ensureSettingHasInitialValue();
134 helper1.setAlteredSettingValue();
135 helper0.ensureSettingHasInitialValue();
136 helper1.ensureSettingHasAlteredValue();
138 helper1.setInitialSettingValue();
139 helper0.ensureSettingHasInitialValue();
140 helper1.ensureSettingHasInitialValue();
142 helper0.setAlteredSettingValue();
143 helper0.ensureSettingHasAlteredValue();
144 helper1.ensureSettingHasInitialValue();
146 helper0.setInitialSettingValue();
147 helper0.ensureSettingHasInitialValue();
148 helper1.ensureSettingHasInitialValue();
150 helper0.setAlteredSettingValue();
151 helper0.ensureSettingHasAlteredValue();
152 helper1.ensureSettingHasInitialValue();
154 helper1.setAlteredSettingValue();
155 helper0.ensureSettingHasAlteredValue();
156 helper1.ensureSettingHasAlteredValue();
158 helper0.setInitialSettingValue();
159 helper0.ensureSettingHasInitialValue();
160 helper1.ensureSettingHasAlteredValue();
162 helper1.setInitialSettingValue();
163 helper0.ensureSettingHasInitialValue();
164 helper1.ensureSettingHasInitialValue();
168 @Feature({"XWalkViewInternal", "Preferences"})
169 public void testDomStorageEnabledWithTwoViews() throws Throwable {
170 ViewPair views = createViews();
171 runPerViewSettingsTest(
172 new XWalkViewSettingsDomStorageEnabledTestHelper(
173 views.getView0(), views.getClient0()),
174 new XWalkViewSettingsDomStorageEnabledTestHelper(
175 views.getView1(), views.getClient1()));