| Index: android_webview/tools/WebViewShellTest/src/org/chromium/webview_shell/test/WebViewLayoutTest.java | 
| diff --git a/android_webview/tools/WebViewShellTest/src/org/chromium/webview_shell/test/WebViewLayoutTest.java b/android_webview/tools/WebViewShellTest/src/org/chromium/webview_shell/test/WebViewLayoutTest.java | 
| deleted file mode 100644 | 
| index 93276d20459f354f98341814ab4f56169b18bd37..0000000000000000000000000000000000000000 | 
| --- a/android_webview/tools/WebViewShellTest/src/org/chromium/webview_shell/test/WebViewLayoutTest.java | 
| +++ /dev/null | 
| @@ -1,386 +0,0 @@ | 
| -// Copyright 2015 The Chromium Authors. All rights reserved. | 
| -// Use of this source code is governed by a BSD-style license that can be | 
| -// found in the LICENSE file. | 
| - | 
| -package org.chromium.webview_shell.test; | 
| - | 
| -import android.os.Environment; | 
| -import android.test.ActivityInstrumentationTestCase2; | 
| -import android.test.suitebuilder.annotation.MediumTest; | 
| - | 
| -import junit.framework.ComparisonFailure; | 
| - | 
| -import org.chromium.base.Log; | 
| -import org.chromium.webview_shell.WebViewLayoutTestActivity; | 
| - | 
| -import java.io.BufferedReader; | 
| -import java.io.File; | 
| -import java.io.FileInputStream; | 
| -import java.io.FileNotFoundException; | 
| -import java.io.FileOutputStream; | 
| -import java.io.IOException; | 
| -import java.io.InputStreamReader; | 
| -import java.util.HashMap; | 
| -import java.util.HashSet; | 
| -import java.util.concurrent.TimeUnit; | 
| -import java.util.concurrent.TimeoutException; | 
| - | 
| -/** | 
| - * Tests running end-to-end layout tests. | 
| - */ | 
| -public class WebViewLayoutTest | 
| -        extends ActivityInstrumentationTestCase2<WebViewLayoutTestActivity> { | 
| - | 
| -    private static final String TAG = "WebViewLayoutTest"; | 
| - | 
| -    private static final String EXTERNAL_PREFIX = | 
| -            Environment.getExternalStorageDirectory().getAbsolutePath() + "/"; | 
| -    private static final String BASE_WEBVIEW_TEST_PATH = "android_webview/tools/WebViewShell/test/"; | 
| -    private static final String BASE_BLINK_TEST_PATH = "third_party/WebKit/LayoutTests/"; | 
| -    private static final String BASE_BLINK_STABLE_TEST_PATH = | 
| -            BASE_BLINK_TEST_PATH + "virtual/stable/"; | 
| -    private static final String PATH_WEBVIEW_PREFIX = EXTERNAL_PREFIX + BASE_WEBVIEW_TEST_PATH; | 
| -    private static final String PATH_BLINK_PREFIX = EXTERNAL_PREFIX + BASE_BLINK_TEST_PATH; | 
| -    private static final String PATH_BLINK_STABLE_PREFIX = | 
| -            EXTERNAL_PREFIX + BASE_BLINK_STABLE_TEST_PATH; | 
| - | 
| -    private static final long TIMEOUT_SECONDS = 20; | 
| - | 
| -    private WebViewLayoutTestActivity mTestActivity; | 
| - | 
| -    public WebViewLayoutTest() { | 
| -        super(WebViewLayoutTestActivity.class); | 
| -    } | 
| - | 
| -    @Override | 
| -    protected void setUp() throws Exception { | 
| -        super.setUp(); | 
| -        mTestActivity = (WebViewLayoutTestActivity) getActivity(); | 
| -    } | 
| - | 
| -    @Override | 
| -    protected void tearDown() throws Exception { | 
| -        mTestActivity.finish(); | 
| -        super.tearDown(); | 
| -    } | 
| - | 
| -    @Override | 
| -    public WebViewLayoutTestRunner getInstrumentation() { | 
| -        return (WebViewLayoutTestRunner) super.getInstrumentation(); | 
| -    } | 
| - | 
| -    @MediumTest | 
| -    public void testSimple() throws Exception { | 
| -        runWebViewLayoutTest("experimental/basic-logging.html", | 
| -                             "experimental/basic-logging-expected.txt"); | 
| -    } | 
| - | 
| -    // This is a non-failing test because it tends to require frequent rebaselines. | 
| -    @MediumTest | 
| -    public void testGlobalInterfaceNoFail() throws Exception { | 
| -        runBlinkLayoutTest("webexposed/global-interface-listing.html", | 
| -                           "webexposed/global-interface-listing-expected.txt", true); | 
| -    } | 
| - | 
| -    // This is a non-failing test to avoid 'blind' rebaselines by the sheriff | 
| -    // (see crbug.com/564765). | 
| -    @MediumTest | 
| -    public void testNoUnexpectedInterfaces() throws Exception { | 
| -        ensureJsTestCopied(); | 
| -        loadUrlWebViewAsync("file://" + PATH_BLINK_PREFIX | 
| -                + "webexposed/global-interface-listing.html", mTestActivity); | 
| -        String webviewExpected = readFile(PATH_WEBVIEW_PREFIX | 
| -                + "webexposed/global-interface-listing-expected.txt"); | 
| -        mTestActivity.waitForFinish(TIMEOUT_SECONDS, TimeUnit.SECONDS); | 
| -        String result = mTestActivity.getTestResult(); | 
| - | 
| -        HashMap<String, HashSet<String>> webviewInterfacesMap = buildHashMap(result); | 
| -        HashMap<String, HashSet<String>> webviewExpectedInterfacesMap = | 
| -                buildHashMap(webviewExpected); | 
| -        StringBuilder newInterfaces = new StringBuilder(); | 
| - | 
| -        // Check that each current webview interface is one of webview expected interfaces. | 
| -        for (String interfaceS : webviewInterfacesMap.keySet()) { | 
| -            if (webviewExpectedInterfacesMap.get(interfaceS) == null) { | 
| -                newInterfaces.append(interfaceS + "\n"); | 
| -            } | 
| -        } | 
| - | 
| -        if (newInterfaces.length() > 0) { | 
| -            Log.w(TAG, "Unexpected WebView interfaces found: " + newInterfaces.toString()); | 
| -        } | 
| -    } | 
| - | 
| -    @MediumTest | 
| -    public void testWebViewExcludedInterfaces() throws Exception { | 
| -        ensureJsTestCopied(); | 
| -        loadUrlWebViewAsync("file://" + PATH_BLINK_PREFIX | 
| -                + "webexposed/global-interface-listing.html", mTestActivity); | 
| -        String blinkExpected = readFile(PATH_BLINK_PREFIX | 
| -                + "webexposed/global-interface-listing-expected.txt"); | 
| -        String webviewExcluded = readFile(PATH_WEBVIEW_PREFIX | 
| -                + "webexposed/not-webview-exposed.txt"); | 
| -        mTestActivity.waitForFinish(TIMEOUT_SECONDS, TimeUnit.SECONDS); | 
| -        String result = mTestActivity.getTestResult(); | 
| - | 
| -        HashMap<String, HashSet<String>> webviewExcludedInterfacesMap = | 
| -                buildHashMap(webviewExcluded); | 
| -        HashMap<String, HashSet<String>> webviewInterfacesMap = buildHashMap(result); | 
| -        HashMap<String, HashSet<String>> blinkInterfacesMap = buildHashMap(blinkExpected); | 
| -        StringBuilder unexpected = new StringBuilder(); | 
| - | 
| -        // Check that each excluded interface and its properties are present in blinkInterfaceMap | 
| -        // but not in webviewInterfacesMap. | 
| -        for (HashMap.Entry<String, HashSet<String>> entry : | 
| -                webviewExcludedInterfacesMap.entrySet()) { | 
| -            String interfaceS = entry.getKey(); | 
| -            HashSet<String> subsetBlink = blinkInterfacesMap.get(interfaceS); | 
| -            assertNotNull("Interface " + interfaceS + " not exposed in blink", subsetBlink); | 
| - | 
| -            HashSet<String> subsetWebView = webviewInterfacesMap.get(interfaceS); | 
| -            HashSet<String> subsetExcluded = entry.getValue(); | 
| -            if (subsetExcluded.isEmpty() && subsetWebView != null) { | 
| -                unexpected.append(interfaceS + "\n"); | 
| -                continue; | 
| -            } | 
| - | 
| -            for (String property : subsetExcluded) { | 
| -                assertTrue("Interface " + interfaceS + "." + property + " not exposed in blink", | 
| -                        subsetBlink.contains(property)); | 
| -                if (subsetWebView != null && subsetWebView.contains(property)) { | 
| -                    unexpected.append(interfaceS + "." + property + "\n"); | 
| -                } | 
| -            } | 
| -        } | 
| -        assertEquals("Unexpected webview interfaces found", "", unexpected.toString()); | 
| -    } | 
| - | 
| -    @MediumTest | 
| -    public void testWebViewIncludedStableInterfaces() throws Exception { | 
| -        ensureJsTestCopied(); | 
| -        loadUrlWebViewAsync("file://" + PATH_BLINK_PREFIX | 
| -                + "webexposed/global-interface-listing.html", mTestActivity); | 
| -        String blinkStableExpected = readFile(PATH_BLINK_STABLE_PREFIX | 
| -                + "webexposed/global-interface-listing-expected.txt"); | 
| -        String webviewExcluded = readFile(PATH_WEBVIEW_PREFIX | 
| -                + "webexposed/not-webview-exposed.txt"); | 
| -        mTestActivity.waitForFinish(TIMEOUT_SECONDS, TimeUnit.SECONDS); | 
| -        String result = mTestActivity.getTestResult(); | 
| - | 
| -        HashMap<String, HashSet<String>> webviewExcludedInterfacesMap = | 
| -                buildHashMap(webviewExcluded); | 
| -        HashMap<String, HashSet<String>> webviewInterfacesMap = buildHashMap(result); | 
| -        HashMap<String, HashSet<String>> blinkStableInterfacesMap = | 
| -                buildHashMap(blinkStableExpected); | 
| -        StringBuilder missing = new StringBuilder(); | 
| - | 
| -        // Check that each stable blink interface and its properties are present in webview | 
| -        // except the excluded interfaces/properties. | 
| -        for (HashMap.Entry<String, HashSet<String>> entry : blinkStableInterfacesMap.entrySet()) { | 
| -            String interfaceS = entry.getKey(); | 
| -            HashSet<String> subsetExcluded = webviewExcludedInterfacesMap.get(interfaceS); | 
| -            if (subsetExcluded != null && subsetExcluded.isEmpty()) continue; | 
| - | 
| -            HashSet<String> subsetBlink = entry.getValue(); | 
| -            HashSet<String> subsetWebView = webviewInterfacesMap.get(interfaceS); | 
| - | 
| -            if (subsetWebView == null) { | 
| -                // interface is missing completely | 
| -                missing.append(interfaceS + "\n"); | 
| -                continue; | 
| -            } | 
| - | 
| -            for (String propertyBlink : subsetBlink) { | 
| -                if (subsetExcluded != null && subsetExcluded.contains(propertyBlink)) continue; | 
| -                if (!subsetWebView.contains(propertyBlink)) { | 
| -                    missing.append(interfaceS + "." + propertyBlink + "\n"); | 
| -                } | 
| -            } | 
| -        } | 
| -        assertEquals("Missing webview interfaces found", "", missing.toString()); | 
| -    } | 
| - | 
| -    @MediumTest | 
| -    public void testRequestMIDIAccess() throws Exception { | 
| -        mTestActivity.setGrantPermission(true); | 
| -        runWebViewLayoutTest("blink-apis/webmidi/requestmidiaccess.html", | 
| -                "blink-apis/webmidi/requestmidiaccess-expected.txt"); | 
| -        mTestActivity.setGrantPermission(false); | 
| -    } | 
| - | 
| -    @MediumTest | 
| -    public void testRequestMIDIAccessDenyPermission() throws Exception { | 
| -        runWebViewLayoutTest("blink-apis/webmidi/requestmidiaccess-permission-denied.html", | 
| -                "blink-apis/webmidi/requestmidiaccess-permission-denied-expected.html"); | 
| -    } | 
| - | 
| -    // Blink platform API tests | 
| - | 
| -    @MediumTest | 
| -    public void testGeolocationCallbacks() throws Exception { | 
| -        runWebViewLayoutTest("blink-apis/geolocation/geolocation-permission-callbacks.html", | 
| -                "blink-apis/geolocation/geolocation-permission-callbacks-expected.txt"); | 
| -    } | 
| - | 
| -    @MediumTest | 
| -    public void testMediaStreamApiDenyPermission() throws Exception { | 
| -        runWebViewLayoutTest("blink-apis/webrtc/mediastream-permission-denied-callbacks.html", | 
| -                "blink-apis/webrtc/mediastream-permission-denied-callbacks-expected.txt"); | 
| -    } | 
| - | 
| -    @MediumTest | 
| -    public void testMediaStreamApi() throws Exception { | 
| -        mTestActivity.setGrantPermission(true); | 
| -        runWebViewLayoutTest("blink-apis/webrtc/mediastream-callbacks.html", | 
| -                "blink-apis/webrtc/mediastream-callbacks-expected.txt"); | 
| -        mTestActivity.setGrantPermission(false); | 
| -    } | 
| - | 
| -    @MediumTest | 
| -    public void testBatteryApi() throws Exception { | 
| -        runWebViewLayoutTest("blink-apis/battery-status/battery-callback.html", | 
| -                "blink-apis/battery-status/battery-callback-expected.txt"); | 
| -    } | 
| - | 
| -    // test helper methods | 
| - | 
| -    private void runWebViewLayoutTest(final String fileName, final String fileNameExpected) | 
| -            throws Exception { | 
| -        runTest(PATH_WEBVIEW_PREFIX + fileName, PATH_WEBVIEW_PREFIX + fileNameExpected, false); | 
| -    } | 
| - | 
| -    private void runBlinkLayoutTest(final String fileName, final String fileNameExpected, | 
| -            boolean noFail) throws Exception { | 
| -        ensureJsTestCopied(); | 
| -        runTest(PATH_BLINK_PREFIX + fileName, PATH_WEBVIEW_PREFIX + fileNameExpected, noFail); | 
| -    } | 
| - | 
| -    private void runTest(final String fileName, final String fileNameExpected, boolean noFail) | 
| -            throws FileNotFoundException, IOException, InterruptedException, TimeoutException { | 
| -        loadUrlWebViewAsync("file://" + fileName, mTestActivity); | 
| - | 
| -        if (getInstrumentation().isRebaseline()) { | 
| -            // this is the rebaseline process | 
| -            mTestActivity.waitForFinish(TIMEOUT_SECONDS, TimeUnit.SECONDS); | 
| -            String result = mTestActivity.getTestResult(); | 
| -            writeFile(fileNameExpected, result, true); | 
| -            Log.i(TAG, "file: " + fileNameExpected + " --> rebaselined, length=" + result.length()); | 
| -        } else { | 
| -            String expected = readFile(fileNameExpected); | 
| -            mTestActivity.waitForFinish(TIMEOUT_SECONDS, TimeUnit.SECONDS); | 
| -            String result = mTestActivity.getTestResult(); | 
| -            if (noFail && !expected.equals(result)) { | 
| -                ComparisonFailure cf = new ComparisonFailure("Unexpected result", expected, result); | 
| -                Log.e(TAG, cf.toString()); | 
| -            } else { | 
| -                assertEquals(expected, result); | 
| -            } | 
| -        } | 
| -    } | 
| - | 
| -    private void loadUrlWebViewAsync(final String fileUrl, | 
| -            final WebViewLayoutTestActivity activity) { | 
| -        getInstrumentation().runOnMainSync(new Runnable() { | 
| -            @Override | 
| -            public void run() { | 
| -                activity.loadUrl(fileUrl); | 
| -            } | 
| -        }); | 
| -    } | 
| - | 
| -    private static void ensureJsTestCopied() throws IOException { | 
| -        File jsTestFile = new File(PATH_BLINK_PREFIX + "resources/js-test.js"); | 
| -        if (jsTestFile.exists()) return; | 
| -        String original = readFile(PATH_WEBVIEW_PREFIX + "resources/js-test.js"); | 
| -        writeFile(PATH_BLINK_PREFIX + "resources/js-test.js", original, false); | 
| -    } | 
| - | 
| -    /** | 
| -     * Reads a file and returns it's contents as string. | 
| -     */ | 
| -    private static String readFile(String fileName) throws IOException { | 
| -        FileInputStream inputStream = new FileInputStream(new File(fileName)); | 
| -        try { | 
| -            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); | 
| -            try { | 
| -                StringBuilder contents = new StringBuilder(); | 
| -                String line; | 
| - | 
| -                while ((line = reader.readLine()) != null) { | 
| -                    contents.append(line); | 
| -                    contents.append("\n"); | 
| -                } | 
| -                return contents.toString(); | 
| -            } finally { | 
| -                reader.close(); | 
| -            } | 
| -        } finally { | 
| -            inputStream.close(); | 
| -        } | 
| -    } | 
| - | 
| -    /** | 
| -     * Writes a file with the given fileName and contents. If overwrite is true overwrites any | 
| -     * exisiting file with the same file name. If the file does not exist any intermediate | 
| -     * required directories are created. | 
| -     */ | 
| -    private static void writeFile(final String fileName, final String contents, boolean overwrite) | 
| -            throws FileNotFoundException, IOException { | 
| -        File fileOut = new File(fileName); | 
| - | 
| -        if (fileOut.exists() && !overwrite) { | 
| -            return; | 
| -        } | 
| - | 
| -        String absolutePath = fileOut.getAbsolutePath(); | 
| -        File filePath = new File(absolutePath.substring(0, absolutePath.lastIndexOf("/"))); | 
| - | 
| -        if (!filePath.exists()) { | 
| -            if (!filePath.mkdirs()) | 
| -                throw new IOException("failed to create directories: " + filePath); | 
| -        } | 
| - | 
| -        FileOutputStream outputStream = new FileOutputStream(fileOut); | 
| -        try { | 
| -            outputStream.write(contents.getBytes()); | 
| -        } finally { | 
| -            outputStream.close(); | 
| -        } | 
| -    } | 
| - | 
| -    private HashMap<String, HashSet<String>> buildHashMap(String contents) { | 
| -        String[] lineByLine = contents.split("\\n"); | 
| - | 
| -        HashSet subset = null; | 
| -        HashMap<String, HashSet<String>> interfaces = new HashMap<String, HashSet<String>>(); | 
| -        for (String line : lineByLine) { | 
| -            String s = trimAndRemoveComments(line); | 
| -            if (isInterfaceOrGlobalObject(s)) { | 
| -                subset = interfaces.get(s); | 
| -                if (subset == null) { | 
| -                    subset = new HashSet(); | 
| -                    interfaces.put(s, subset); | 
| -                } | 
| -            } else if (isInterfaceProperty(s) && subset != null) { | 
| -                subset.add(s); | 
| -            } | 
| -        } | 
| -        return interfaces; | 
| -    } | 
| - | 
| -    private String trimAndRemoveComments(String line) { | 
| -        String s = line.trim(); | 
| -        int commentIndex = s.indexOf("#"); // remove any potential comments | 
| -        return (commentIndex >= 0) ? s.substring(0, commentIndex).trim() : s; | 
| -    } | 
| - | 
| -    private boolean isInterfaceOrGlobalObject(String s) { | 
| -        return s.startsWith("interface") || s.startsWith("[GLOBAL OBJECT]"); | 
| -    } | 
| - | 
| -    private boolean isInterfaceProperty(String s) { | 
| -        return s.startsWith("getter") || s.startsWith("setter") | 
| -                || s.startsWith("method") || s.startsWith("attribute"); | 
| -    } | 
| - | 
| -} | 
|  |