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