1dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski/*
2dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski * Copyright (C) 2010 The Android Open Source Project
3dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski *
4dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski * Licensed under the Apache License, Version 2.0 (the "License");
5dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski * you may not use this file except in compliance with the License.
6dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski * You may obtain a copy of the License at
7dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski *
8dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski *      http://www.apache.org/licenses/LICENSE-2.0
9dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski *
10dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski * Unless required by applicable law or agreed to in writing, software
11dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski * distributed under the License is distributed on an "AS IS" BASIS,
12dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski * See the License for the specific language governing permissions and
14dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski * limitations under the License.
15dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski */
16dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski
17dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowskipackage com.android.dumprendertree2;
18dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski
19dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowskiimport android.util.Log;
20dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowskiimport android.webkit.ConsoleMessage;
21dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski
22dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowskiimport java.net.MalformedURLException;
23dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowskiimport java.net.URL;
24dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski
25dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski/**
26dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski * A class that stores consoles messages, database callbacks, alert messages, etc.
27dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski */
28dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowskipublic class AdditionalTextOutput {
29dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski    private static final String LOG_TAG = "AdditionalTextOutput";
30dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski
3140968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski    /**
3240968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski     * Ordering of enums is important as it determines ordering of the toString method!
3340968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski     * StringBuilders will be printed in the order the corresponding types appear here.
3440968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski     */
35dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski    private enum OutputType {
3640968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        JS_DIALOG,
37dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski        EXCEEDED_DB_QUOTA_MESSAGE,
38dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski        CONSOLE_MESSAGE;
39dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski    }
40dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski
41dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski    StringBuilder[] mOutputs = new StringBuilder[OutputType.values().length];
42dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski
4340968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski    private StringBuilder getStringBuilderForType(OutputType outputType) {
4440968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        int index = outputType.ordinal();
45dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski        if (mOutputs[index] == null) {
46dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski            mOutputs[index] = new StringBuilder();
47dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski        }
4840968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        return mOutputs[index];
4940968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski    }
5040968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski
5140968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski    public void appendExceededDbQuotaMessage(String urlString, String databaseIdentifier) {
5240968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        StringBuilder output = getStringBuilderForType(OutputType.EXCEEDED_DB_QUOTA_MESSAGE);
53dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski
54dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski        String protocol = "";
55dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski        String host = "";
56dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski        int port = 0;
57dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski
58dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski        try {
59dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski            URL url = new URL(urlString);
60dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski            protocol = url.getProtocol();
61dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski            host = url.getHost();
62dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski            if (url.getPort() > -1) {
63dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski                port = url.getPort();
64dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski            }
65dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski        } catch (MalformedURLException e) {
662e5982a55ac031110ed39515a76f7a5ec9ff2c14Maksymilian Osowski            Log.e(LOG_TAG, "urlString=" + urlString + " databaseIdentifier=" + databaseIdentifier,
672e5982a55ac031110ed39515a76f7a5ec9ff2c14Maksymilian Osowski                    e);
68dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski        }
69dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski
7040968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        output.append("UI DELEGATE DATABASE CALLBACK: ");
7140968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        output.append("exceededDatabaseQuotaForSecurityOrigin:{");
7240968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        output.append(protocol + ", " + host + ", " + port + "} ");
7340968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        output.append("database:" + databaseIdentifier + "\n");
74dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski    }
75dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski
76dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski    public void appendConsoleMessage(ConsoleMessage consoleMessage) {
7740968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        StringBuilder output = getStringBuilderForType(OutputType.CONSOLE_MESSAGE);
7840968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski
7940968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        output.append("CONSOLE MESSAGE: line " + consoleMessage.lineNumber());
8040968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        output.append(": " + consoleMessage.message() + "\n");
8140968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski    }
8240968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski
8340968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski    public void appendJsAlert(String message) {
8440968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        StringBuilder output = getStringBuilderForType(OutputType.JS_DIALOG);
8540968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski
8640968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        output.append("ALERT: ");
8740968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        output.append(message);
8840968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        output.append('\n');
8940968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski    }
9040968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski
9140968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski    public void appendJsConfirm(String message) {
9240968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        StringBuilder output = getStringBuilderForType(OutputType.JS_DIALOG);
9340968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski
9440968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        output.append("CONFIRM: ");
9540968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        output.append(message);
9640968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        output.append('\n');
9740968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski    }
9840968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski
9940968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski    public void appendJsPrompt(String message, String defaultValue) {
10040968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        StringBuilder output = getStringBuilderForType(OutputType.JS_DIALOG);
101dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski
10240968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        output.append("PROMPT: ");
10340968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        output.append(message);
10440968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        output.append(", default text: ");
10540968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        output.append(defaultValue);
10640968a4540164b69436c482738f46e22867b8ff3Maksymilian Osowski        output.append('\n');
107dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski    }
108dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski
109dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski    @Override
110dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski    public String toString() {
111dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski        StringBuilder result = new StringBuilder();
112dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski        for (int i = 0; i < mOutputs.length; i++) {
113dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski            if (mOutputs[i] != null) {
114dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski                result.append(mOutputs[i].toString());
115dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski            }
116dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski        }
117dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski        return result.toString();
118dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski    }
119dd4bff62b54033bedc254f517397ae8f954d0dc9Maksymilian Osowski}