Upstream version 8.37.186.0
[platform/framework/web/crosswalk.git] / src / xwalk / test / android / core_internal / javatests / src / org / xwalk / core / internal / xwview / test / SetDomStorageEnabledTest.java
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.
5
6 package org.xwalk.core.internal.xwview.test;
7
8 import android.graphics.Bitmap;
9 import android.test.suitebuilder.annotation.SmallTest;
10 import android.webkit.WebResourceResponse;
11
12 import java.util.concurrent.atomic.AtomicReference;
13
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;
20
21 /**
22  * Test suite for setDomStorageEnabled().
23  */
24 public class SetDomStorageEnabledTest extends XWalkViewInternalTestBase {
25     private static final boolean ENABLED = true;
26     private static final boolean DISABLED = false;
27
28     abstract class XWalkViewSettingsTestHelper<T> {
29         protected final XWalkViewInternal mXWalkViewInternal;
30         protected final XWalkSettings mXWalkSettings;
31
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);
39             }
40         }
41
42         void ensureSettingHasAlteredValue() throws Throwable {
43             ensureSettingHasValue(getAlteredValue());
44         }
45
46         void ensureSettingHasInitialValue() throws Throwable {
47             ensureSettingHasValue(getInitialValue());
48         }
49
50         void setAlteredSettingValue() throws Throwable {
51             setCurrentValue(getAlteredValue());
52         }
53
54         void setInitialSettingValue() throws Throwable {
55             setCurrentValue(getInitialValue());
56         }
57
58         protected abstract T getAlteredValue();
59
60         protected abstract T getInitialValue();
61
62         protected abstract T getCurrentValue();
63
64         protected abstract void setCurrentValue(T value) throws Throwable;
65
66         protected abstract void doEnsureSettingHasValue(T value) throws Throwable;
67
68         private void ensureSettingHasValue(T value) throws Throwable {
69             assertEquals(value, getCurrentValue());
70             doEnsureSettingHasValue(value);
71         }
72     }
73
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;
78
79         XWalkViewSettingsDomStorageEnabledTestHelper(
80                 XWalkViewInternal xWalkContent,
81                 final TestHelperBridge helperBridge) throws Throwable {
82             super(xWalkContent, true);
83             mHelperBridge = helperBridge;
84         }
85
86         @Override
87         protected Boolean getAlteredValue() {
88             return ENABLED;
89         }
90
91         @Override
92         protected Boolean getInitialValue() {
93             return DISABLED;
94         }
95
96         @Override
97         protected Boolean getCurrentValue() {
98             return mXWalkSettings.getDomStorageEnabled();
99         }
100
101         @Override
102         protected void setCurrentValue(Boolean value) {
103             mXWalkSettings.setDomStorageEnabled(value);
104         }
105
106         @Override
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"));
112             assertEquals(
113                 value == ENABLED ? HAS_LOCAL_STORAGE : NO_LOCAL_STORAGE,
114                         mHelperBridge.getChangedTitle());
115         }
116     }
117
118     /**
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.
124      *
125      * @param helper0 Test helper for the first ContentView
126      * @param helper1 Test helper for the second ContentView
127      * @throws Throwable
128      */
129     private void runPerViewSettingsTest(XWalkViewSettingsTestHelper helper0,
130             XWalkViewSettingsTestHelper helper1) throws Throwable {
131         helper0.ensureSettingHasInitialValue();
132         helper1.ensureSettingHasInitialValue();
133
134         helper1.setAlteredSettingValue();
135         helper0.ensureSettingHasInitialValue();
136         helper1.ensureSettingHasAlteredValue();
137
138         helper1.setInitialSettingValue();
139         helper0.ensureSettingHasInitialValue();
140         helper1.ensureSettingHasInitialValue();
141
142         helper0.setAlteredSettingValue();
143         helper0.ensureSettingHasAlteredValue();
144         helper1.ensureSettingHasInitialValue();
145
146         helper0.setInitialSettingValue();
147         helper0.ensureSettingHasInitialValue();
148         helper1.ensureSettingHasInitialValue();
149
150         helper0.setAlteredSettingValue();
151         helper0.ensureSettingHasAlteredValue();
152         helper1.ensureSettingHasInitialValue();
153
154         helper1.setAlteredSettingValue();
155         helper0.ensureSettingHasAlteredValue();
156         helper1.ensureSettingHasAlteredValue();
157
158         helper0.setInitialSettingValue();
159         helper0.ensureSettingHasInitialValue();
160         helper1.ensureSettingHasAlteredValue();
161
162         helper1.setInitialSettingValue();
163         helper0.ensureSettingHasInitialValue();
164         helper1.ensureSettingHasInitialValue();
165     }
166
167     @SmallTest
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()));
176     }
177 }