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