1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Copyright (c) 2013 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.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.XWalkClient;
17 import org.xwalk.core.XWalkContent;
18 import org.xwalk.core.XWalkSettings;
19 import org.xwalk.core.XWalkView;
20 import org.xwalk.core.XWalkWebChromeClient;
23 * Test suite for setDomStorageEnabled().
25 public class SetDomStorageEnabledTest extends XWalkViewTestBase {
26 private static final boolean ENABLED = true;
27 private static final boolean DISABLED = false;
29 abstract class XWalkViewSettingsTestHelper<T> {
30 protected final XWalkContent mXWalkContent;
31 protected final XWalkSettings mXWalkSettings;
33 XWalkViewSettingsTestHelper(XWalkContent xWalkContent,
34 boolean requiresJsEnabled) throws Throwable {
35 mXWalkContent = xWalkContent;
36 mXWalkSettings = getXWalkSettingsOnUiThreadByContent(xWalkContent);
37 mXWalkSettings.setDomStorageEnabled(false);
38 if (requiresJsEnabled) {
39 mXWalkSettings.setJavaScriptEnabled(true);
43 void ensureSettingHasAlteredValue() throws Throwable {
44 ensureSettingHasValue(getAlteredValue());
47 void ensureSettingHasInitialValue() throws Throwable {
48 ensureSettingHasValue(getInitialValue());
51 void setAlteredSettingValue() throws Throwable {
52 setCurrentValue(getAlteredValue());
55 void setInitialSettingValue() throws Throwable {
56 setCurrentValue(getInitialValue());
59 protected abstract T getAlteredValue();
61 protected abstract T getInitialValue();
63 protected abstract T getCurrentValue();
65 protected abstract void setCurrentValue(T value) throws Throwable;
67 protected abstract void doEnsureSettingHasValue(T value) throws Throwable;
69 private void ensureSettingHasValue(T value) throws Throwable {
70 assertEquals(value, getCurrentValue());
71 doEnsureSettingHasValue(value);
75 class XWalkViewSettingsDomStorageEnabledTestHelper extends XWalkViewSettingsTestHelper<Boolean> {
76 private static final String NO_LOCAL_STORAGE = "No localStorage";
77 private static final String HAS_LOCAL_STORAGE = "Has localStorage";
78 TestHelperBridge mHelperBridge;
80 XWalkViewSettingsDomStorageEnabledTestHelper(
81 XWalkContent xWalkContent,
82 final TestHelperBridge helperBridge) throws Throwable {
83 super(xWalkContent, true);
84 mHelperBridge = helperBridge;
88 protected Boolean getAlteredValue() {
93 protected Boolean getInitialValue() {
98 protected Boolean getCurrentValue() {
99 return mXWalkSettings.getDomStorageEnabled();
103 protected void setCurrentValue(Boolean value) {
104 mXWalkSettings.setDomStorageEnabled(value);
108 protected void doEnsureSettingHasValue(Boolean value) throws Throwable {
109 // It is not permitted to access localStorage from data URLs in WebKit,
110 // that is why a standalone page must be used.
111 loadUrlSyncByContent(mXWalkContent, mHelperBridge,
112 UrlUtils.getTestFileUrl("xwalkview/localStorage.html"));
114 value == ENABLED ? HAS_LOCAL_STORAGE : NO_LOCAL_STORAGE,
115 mHelperBridge.getChangedTitle());
120 * Verifies the following statements about a setting:
121 * - initially, the setting has a default value;
122 * - the setting can be switched to an alternate value and back;
123 * - switching a setting in the first XWalkView doesn't affect the setting
124 * state in the second XWalkView and vice versa.
126 * @param helper0 Test helper for the first ContentView
127 * @param helper1 Test helper for the second ContentView
130 private void runPerViewSettingsTest(XWalkViewSettingsTestHelper helper0,
131 XWalkViewSettingsTestHelper helper1) throws Throwable {
132 helper0.ensureSettingHasInitialValue();
133 helper1.ensureSettingHasInitialValue();
135 helper1.setAlteredSettingValue();
136 helper0.ensureSettingHasInitialValue();
137 helper1.ensureSettingHasAlteredValue();
139 helper1.setInitialSettingValue();
140 helper0.ensureSettingHasInitialValue();
141 helper1.ensureSettingHasInitialValue();
143 helper0.setAlteredSettingValue();
144 helper0.ensureSettingHasAlteredValue();
145 helper1.ensureSettingHasInitialValue();
147 helper0.setInitialSettingValue();
148 helper0.ensureSettingHasInitialValue();
149 helper1.ensureSettingHasInitialValue();
151 helper0.setAlteredSettingValue();
152 helper0.ensureSettingHasAlteredValue();
153 helper1.ensureSettingHasInitialValue();
155 helper1.setAlteredSettingValue();
156 helper0.ensureSettingHasAlteredValue();
157 helper1.ensureSettingHasAlteredValue();
159 helper0.setInitialSettingValue();
160 helper0.ensureSettingHasInitialValue();
161 helper1.ensureSettingHasAlteredValue();
163 helper1.setInitialSettingValue();
164 helper0.ensureSettingHasInitialValue();
165 helper1.ensureSettingHasInitialValue();
169 @Feature({"XWalkView", "Preferences"})
170 public void testDomStorageEnabledWithTwoViews() throws Throwable {
171 ViewPair views = createViews();
172 runPerViewSettingsTest(
173 new XWalkViewSettingsDomStorageEnabledTestHelper(
174 views.getContent0(), views.getClient0()),
175 new XWalkViewSettingsDomStorageEnabledTestHelper(
176 views.getContent1(), views.getClient1()));