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

Side by Side Diff: android_webview/tools/WebViewShell/src/org/chromium/webview_shell/WebViewLayoutTestActivity.java

Issue 1785283005: [WebView] Reorganize all of the WebView Shell apks into their own dir. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update path in run_tests.sh Created 4 years, 9 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
OLDNEW
(Empty)
1 // Copyright 2015 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.webview_shell;
6
7 import android.app.Activity;
8 import android.os.Bundle;
9 import android.text.TextUtils;
10
11 import android.webkit.ConsoleMessage;
12 import android.webkit.GeolocationPermissions;
13 import android.webkit.PermissionRequest;
14 import android.webkit.WebChromeClient;
15 import android.webkit.WebSettings;
16 import android.webkit.WebView;
17 import android.webkit.WebViewClient;
18
19 import java.util.concurrent.TimeUnit;
20 import java.util.concurrent.TimeoutException;
21
22 /**
23 * This activity is used for running layout tests using webview. The activity
24 * creates a webview instance, loads url and captures console messages from
25 * JavaScript until the test is finished.
26 * provides a blocking callback.
27 */
28 public class WebViewLayoutTestActivity extends Activity {
29
30 private final StringBuilder mConsoleLog = new StringBuilder();
31 private final Object mLock = new Object();
32 private static final String TEST_FINISHED_SENTINEL = "TEST FINISHED";
33
34 private WebView mWebView;
35 private boolean mFinished = false;
36 private boolean mGrantPermission = false;
37
38 private static final String[] AUTOMATICALLY_GRANT =
39 { PermissionRequest.RESOURCE_VIDEO_CAPTURE, PermissionRequest.RESOUR CE_AUDIO_CAPTURE };
40
41 @Override
42 public void onCreate(Bundle savedInstanceState) {
43 super.onCreate(savedInstanceState);
44 setContentView(R.layout.activity_webview);
45 mWebView = (WebView) findViewById(R.id.webview);
46 WebSettings settings = mWebView.getSettings();
47 initializeSettings(settings);
48
49 mWebView.setWebViewClient(new WebViewClient() {
50 @Override
51 public boolean shouldOverrideUrlLoading(WebView webView, String url) {
52 return false;
53 }
54
55 @Override
56 public void onReceivedError(WebView view, int errorCode, String desc ription,
57 String failingUrl) {
58 mConsoleLog.append("WebView error: " + description + ", " + fail ingUrl + "\n");
59 mConsoleLog.append(TEST_FINISHED_SENTINEL + "\n");
60 finishTest();
61 }
62 });
63
64 mWebView.setWebChromeClient(new WebChromeClient() {
65 @Override
66 public void onGeolocationPermissionsShowPrompt(String origin,
67 GeolocationPermissions.Callback callback) {
68 mConsoleLog.append("onGeolocationPermissionsShowPrompt" + "\n");
69 if (mGrantPermission) {
70 mConsoleLog.append("geolocation request granted" + "\n");
71 callback.invoke(origin, true /* allow */, false);
72 } else {
73 mConsoleLog.append("geolocation request denied" + "\n");
74 callback.invoke(origin, false /* allow */, false);
75 }
76 }
77
78 @Override
79 public void onPermissionRequest(PermissionRequest request) {
80 mConsoleLog.append("onPermissionRequest: "
81 + TextUtils.join(",", request.getResources()) + "\n");
82 if (mGrantPermission) {
83 mConsoleLog.append("request granted: "
84 + TextUtils.join(",", AUTOMATICALLY_GRANT) + "\n");
85 request.grant(AUTOMATICALLY_GRANT);
86 } else {
87 mConsoleLog.append("request denied" + "\n");
88 request.deny();
89 }
90 }
91
92 @Override
93 public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
94 // TODO(timvolodine): put log and warnings in separate string bu ilders.
95 mConsoleLog.append(consoleMessage.message() + "\n");
96 if (consoleMessage.message().equals(TEST_FINISHED_SENTINEL)) {
97 finishTest();
98 }
99 return true;
100 }
101 });
102 }
103
104 public void waitForFinish(long timeout, TimeUnit unit) throws InterruptedExc eption,
105 TimeoutException {
106 synchronized (mLock) {
107 long deadline = System.currentTimeMillis() + unit.toMillis(timeout);
108 while (!mFinished && System.currentTimeMillis() < deadline) {
109 mLock.wait(deadline - System.currentTimeMillis());
110 }
111 if (!mFinished) {
112 throw new TimeoutException("timeout");
113 }
114 }
115 }
116
117 public String getTestResult() {
118 return mConsoleLog.toString();
119 }
120
121 public void loadUrl(String url) {
122 mWebView.loadUrl(url);
123 mWebView.requestFocus();
124 }
125
126 public void setGrantPermission(boolean allow) {
127 mGrantPermission = allow;
128 }
129
130 private void initializeSettings(WebSettings settings) {
131 settings.setJavaScriptEnabled(true);
132 settings.setGeolocationEnabled(true);
133 settings.setAllowFileAccess(true);
134 settings.setAllowFileAccessFromFileURLs(true);
135 }
136
137 private void finishTest() {
138 mFinished = true;
139 synchronized (mLock) {
140 mLock.notifyAll();
141 }
142 }
143 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698