Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(375)

Side by Side Diff: android_webview/javatests/src/org/chromium/android_webview/test/AwQuotaManagerBridgeTest.java

Issue 12253057: Implement WebStorage API methods (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Real tests passing! Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.android_webview.test;
6
7 import android.test.suitebuilder.annotation.SmallTest;
8 import android.test.suitebuilder.annotation.LargeTest;
9 import android.util.Pair;
10 import android.webkit.ValueCallback;
11
12 import org.chromium.android_webview.AwContents;
13 import org.chromium.android_webview.AwQuotaManagerBridge;
14 import org.chromium.content.browser.ContentSettings;
15 import org.chromium.content.browser.test.util.CallbackHelper;
16 import org.chromium.content.browser.test.util.Criteria;
17 import org.chromium.content.browser.test.util.CriteriaHelper;
18 import org.chromium.net.test.util.TestWebServer;
19
20 import java.util.ArrayList;
21 import java.util.concurrent.Callable;
22 import java.util.List;
23
24 public class AwQuotaManagerBridgeTest extends AndroidWebViewTestBase {
25 private TestAwContentsClient mContentsClient;
26 private AwTestContainerView mTestView;
27 private AwContents mAwContents;
28 private TestWebServer mWebServer;
29 private String mOrigin;
30
31 @Override
32 public void setUp() throws Exception {
33 super.setUp();
34 mContentsClient = new TestAwContentsClient();
35 mTestView = createAwTestContainerViewOnMainSync(mContentsClient);
36 mAwContents = mTestView.getAwContents();
37 mWebServer = new TestWebServer(false);
38 mOrigin = mWebServer.getBaseUrl();
39
40 ContentSettings settings = getContentSettingsOnUiThread(mAwContents);
41 settings.setJavaScriptEnabled(true);
42 settings.setDomStorageEnabled(true);
43 settings.setAppCacheEnabled(true);
44 settings.setAppCachePath("whatever"); // Enables AppCache.
45 }
46
47 @Override
48 public void tearDown() throws Exception {
49 deleteAllData();
50 if (mWebServer != null) {
51 mWebServer.shutdown();
52 }
53 super.tearDown();
54 }
55
56 private AwQuotaManagerBridge getQuotaManagerBridge() throws Exception {
57 return runTestOnUiThreadAndGetResult(new Callable<AwQuotaManagerBridge>( ) {
58 @Override
59 public AwQuotaManagerBridge call() throws Exception {
60 return AwQuotaManagerBridge.getInstance();
61 }
62 });
63 }
64
65 private void deleteAllData() throws Exception {
66 final AwQuotaManagerBridge bridge = getQuotaManagerBridge();
67 getInstrumentation().runOnMainSync(new Runnable() {
68 @Override
69 public void run() {
70 bridge.deleteAllData();
71 }
72 });
73 }
74
75 private void deleteOrigin(final String origin) throws Exception {
76 final AwQuotaManagerBridge bridge = getQuotaManagerBridge();
77 getInstrumentation().runOnMainSync(new Runnable() {
78 @Override
79 public void run() {
80 bridge.deleteOrigin(origin);
81 }
82 });
83 }
84
85 private static class GetOriginsCallbackHelper extends CallbackHelper {
86 private AwQuotaManagerBridge.Origins mOrigins;
87
88 public void notifyCalled(AwQuotaManagerBridge.Origins origins) {
89 mOrigins = origins;
90 notifyCalled();
91 }
92
93 public AwQuotaManagerBridge.Origins getOrigins() {
94 assert mCallCount > 0;
95 return mOrigins;
96 }
97 }
98
99 private AwQuotaManagerBridge.Origins getOrigins() throws Exception {
100 final GetOriginsCallbackHelper callbackHelper = new GetOriginsCallbackHe lper();
101 final AwQuotaManagerBridge bridge = getQuotaManagerBridge();
102
103 int callCount = callbackHelper.getCallCount();
104 getInstrumentation().runOnMainSync(new Runnable() {
105 @Override
106 public void run() {
107 bridge.getOrigins(
108 new ValueCallback<AwQuotaManagerBridge.Origins>() {
109 @Override
110 public void onReceiveValue(AwQuotaManagerBridge.Origins origins) {
111 callbackHelper.notifyCalled(origins);
112 }
113 }
114 );
115 }
116 });
117 callbackHelper.waitForCallback(callCount);
118
119 return callbackHelper.getOrigins();
120 }
121
122 private static class LongValueCallbackHelper extends CallbackHelper {
123 private long mValue;
124
125 public void notifyCalled(long value) {
126 mValue = value;
127 notifyCalled();
128 }
129
130 public long getValue() {
131 assert mCallCount > 0;
132 return mValue;
133 }
134 }
135
136 private long getQuotaForOrigin(final String origin) throws Exception {
137 final LongValueCallbackHelper callbackHelper = new LongValueCallbackHelp er();
138 final AwQuotaManagerBridge bridge = getQuotaManagerBridge();
139
140 int callCount = callbackHelper.getCallCount();
141 getInstrumentation().runOnMainSync(new Runnable() {
142 @Override
143 public void run() {
144 bridge.getQuotaForOrigin("foo.com",
145 new ValueCallback<Long>() {
146 @Override
147 public void onReceiveValue(Long quota) {
148 callbackHelper.notifyCalled(quota);
149 }
150 }
151 );
152 }
153 });
154 callbackHelper.waitForCallback(callCount);
155
156 return callbackHelper.getValue();
157 }
158
159 private long getUsageForOrigin(final String origin) throws Exception {
160 final LongValueCallbackHelper callbackHelper = new LongValueCallbackHelp er();
161 final AwQuotaManagerBridge bridge = getQuotaManagerBridge();
162
163 int callCount = callbackHelper.getCallCount();
164 getInstrumentation().runOnMainSync(new Runnable() {
165 @Override
166 public void run() {
167 bridge.getUsageForOrigin(origin,
168 new ValueCallback<Long>() {
169 @Override
170 public void onReceiveValue(Long usage) {
171 callbackHelper.notifyCalled(usage);
172 }
173 }
174 );
175 }
176 });
177 callbackHelper.waitForCallback(callCount);
178
179 return callbackHelper.getValue();
180 }
181
182 private void useAppCache() throws Exception {
183 final String CACHED_FILE_PATH = "/foo.js";
184 final String CACHED_FILE_CONTENTS = "1 + 1;";
185 mWebServer.setResponse(CACHED_FILE_PATH, CACHED_FILE_CONTENTS, null);
186
187 final String MANIFEST_PATH = "/foo.manifest";
188 final String MANIFEST_CONTENTS = "CACHE MANIFEST\nCACHE:\n" + CACHED_FIL E_PATH;
189 List<Pair<String, String>> manifestHeaders = new ArrayList<Pair<String, String>>();
190 manifestHeaders.add(Pair.create("Content-Disposition", "text/cache-manif est"));
191 mWebServer.setResponse(MANIFEST_PATH, MANIFEST_CONTENTS, manifestHeaders );
192
193 final String PAGE_PATH = "/appcache.html";
194 final String PAGE_CONTENTS = "<html manifest=\"" + MANIFEST_PATH + "\">" +
195 "<head><script src=\"" + CACHED_FILE_PATH + "\"></script></head> </html>";
196 String url = mWebServer.setResponse(PAGE_PATH, PAGE_CONTENTS, null);
197
198 loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url) ;
199 executeJavaScriptAndWaitForResult(mAwContents, mContentsClient,
200 "window.applicationCache.update();");
201 }
202
203 @LargeTest
204 public void testDeleteAllWithAppCache() throws Exception {
205 long currentUsage = getUsageForOrigin(mOrigin);
206 assertEquals(0, currentUsage);
207
208 useAppCache();
209 assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
210 @Override
211 public boolean isSatisfied() {
212 try {
213 return getUsageForOrigin(mOrigin) > 0;
214 } catch (Exception e) {
215 return false;
216 }
217 }
218 }));
219
220 deleteAllData();
221 assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
222 @Override
223 public boolean isSatisfied() {
224 try {
225 return getUsageForOrigin(mOrigin) == 0;
226 } catch (Exception e) {
227 return false;
228 }
229 }
230 }));
231 }
232
233 @LargeTest
234 public void testDeleteOriginWithAppCache() throws Exception {
235 long currentUsage = getUsageForOrigin(mOrigin);
236 assertEquals(0, currentUsage);
237
238 useAppCache();
239 assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
240 @Override
241 public boolean isSatisfied() {
242 try {
243 return getUsageForOrigin(mOrigin) > 0;
244 } catch (Exception e) {
245 return false;
246 }
247 }
248 }));
249
250 deleteOrigin(mOrigin);
251 assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
252 @Override
253 public boolean isSatisfied() {
254 try {
255 return getUsageForOrigin(mOrigin) == 0;
256 } catch (Exception e) {
257 return false;
258 }
259 }
260 }));
261 }
262
263 @LargeTest
264 public void testGetResultsMatch() throws Exception {
265 useAppCache();
266
267 CriteriaHelper.pollForCriteria(new Criteria() {
268 @Override
269 public boolean isSatisfied() {
270 try {
271 return getOrigins().mOrigins.length > 0;
272 } catch (Exception e) {
273 return false;
274 }
275 }
276 });
277
278 AwQuotaManagerBridge.Origins origins = getOrigins();
279 assertEquals(origins.mOrigins.length, origins.mUsage.length);
280 assertEquals(origins.mOrigins.length, origins.mQuota.length);
281
282 for (int i = 0; i < origins.mOrigins.length; ++i) {
283 assertEquals(origins.mUsage[i], getUsageForOrigin(new String(origins .mOrigins[i])));
284 assertEquals(origins.mQuota[i], getQuotaForOrigin(new String(origins .mOrigins[i])));
285 }
286 }
287 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698