146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)/*
246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * Copyright (C) 2012 The Android Open Source Project
346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) *
446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License");
546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * you may not use this file except in compliance with the License.
646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * You may obtain a copy of the License at
746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) *
846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) *      http://www.apache.org/licenses/LICENSE-2.0
946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) *
1046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * Unless required by applicable law or agreed to in writing, software
1146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS,
1246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * See the License for the specific language governing permissions and
1446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) * limitations under the License.
1546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles) */
1646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
1746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)package com.android.webview.chromium;
1846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
1946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)import android.util.Log;
2046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
2146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)// TODO: remove this when all WebView APIs have been implemented.
2246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)public class UnimplementedWebViewApi {
2346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private static String TAG = "UnimplementedWebViewApi";
2446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
2546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private static class UnimplementedWebViewApiException extends UnsupportedOperationException {
2646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        public UnimplementedWebViewApiException() {
2746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            super();
2846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
2946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
3046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
3146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private static boolean THROW = false;
3246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // By default we keep the traces down to one frame to reduce noise, but for debugging it might
3346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    // be useful to set this to true.
3446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    private static boolean FULL_TRACE = false;
3546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
3646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    public static void invoke() throws UnimplementedWebViewApiException {
3746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        if (THROW) {
3846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            throw new UnimplementedWebViewApiException();
3946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        } else {
4046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            if (FULL_TRACE) {
4146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                Log.w(TAG, "Unimplemented WebView method called in: " +
4246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                      Log.getStackTraceString(new Throwable()));
4346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            } else {
4446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                StackTraceElement[] trace = new Throwable().getStackTrace();
4546f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                // The stack trace [0] index is this method (invoke()).
4646f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                StackTraceElement unimplementedMethod = trace[1];
4746f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                StackTraceElement caller = trace[2];
4846f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                Log.w(TAG, "Unimplemented WebView method " + unimplementedMethod.getMethodName() +
4946f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)                        " called from: " + caller.toString());
5046f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)            }
5146f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)        }
5246f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)    }
5346f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)
5446f104289826e85ba76a1a2139d7ecc7daca07b1Torne (Richard Coles)}
55