/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.webkit; import android.webkit.CacheManager.CacheResult; import android.webkit.PluginData; import android.webkit.UrlInterceptHandler; import java.util.Iterator; import java.util.LinkedList; import java.util.Map; public final class UrlInterceptRegistry { private final static String LOGTAG = "intercept"; private static boolean mDisabled = false; private static LinkedList mHandlerList; private static synchronized LinkedList getHandlers() { if(mHandlerList == null) mHandlerList = new LinkedList(); return mHandlerList; } /** * set the flag to control whether url intercept is enabled or disabled * * @param disabled true to disable the cache */ public static synchronized void setUrlInterceptDisabled(boolean disabled) { mDisabled = disabled; } /** * get the state of the url intercept, enabled or disabled * * @return return if it is disabled */ public static synchronized boolean urlInterceptDisabled() { return mDisabled; } /** * Register a new UrlInterceptHandler. This handler will be called * before any that were previously registered. * * @param handler The new UrlInterceptHandler object * @return true if the handler was not previously registered. */ public static synchronized boolean registerHandler( UrlInterceptHandler handler) { if (!getHandlers().contains(handler)) { getHandlers().addFirst(handler); return true; } else { return false; } } /** * Unregister a previously registered UrlInterceptHandler. * * @param handler A previously registered UrlInterceptHandler. * @return true if the handler was found and removed from the list. */ public static synchronized boolean unregisterHandler( UrlInterceptHandler handler) { return getHandlers().remove(handler); } /** * Given an url, returns the CacheResult of the first * UrlInterceptHandler interested, or null if none are. * * @return A CacheResult containing surrogate content. * @Deprecated Use PluginData getPluginData( String url, * Map headers) instead. */ @Deprecated public static synchronized CacheResult getSurrogate( String url, Map headers) { if (urlInterceptDisabled()) { return null; } Iterator iter = getHandlers().listIterator(); while (iter.hasNext()) { UrlInterceptHandler handler = (UrlInterceptHandler) iter.next(); CacheResult result = handler.service(url, headers); if (result != null) { return result; } } return null; } /** * Given an url, returns the PluginData of the first * UrlInterceptHandler interested, or null if none are or if * intercepts are disabled. * * @return A PluginData instance containing surrogate content. */ public static synchronized PluginData getPluginData( String url, Map headers) { if (urlInterceptDisabled()) { return null; } Iterator iter = getHandlers().listIterator(); while (iter.hasNext()) { UrlInterceptHandler handler = (UrlInterceptHandler) iter.next(); PluginData data = handler.getPluginData(url, headers); if (data != null) { return data; } } return null; } }