174fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon/* 274fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * Copyright (C) 2008 The Android Open Source Project 374fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * 474fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * Licensed under the Apache License, Version 2.0 (the "License"); 574fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * you may not use this file except in compliance with the License. 674fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * You may obtain a copy of the License at 774fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * 874fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * http://www.apache.org/licenses/LICENSE-2.0 974fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * 1074fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * Unless required by applicable law or agreed to in writing, software 1174fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * distributed under the License is distributed on an "AS IS" BASIS, 1274fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1374fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * See the License for the specific language governing permissions and 1474fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * limitations under the License. 1574fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon */ 1674fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon 1774fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixonpackage android.webkit; 1874fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon 1974fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixonimport android.webkit.CacheManager.CacheResult; 2074fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixonimport android.webkit.PluginData; 2174fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixonimport android.webkit.UrlInterceptHandler; 2274fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon 2374fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixonimport java.util.Iterator; 2474fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixonimport java.util.LinkedList; 2574fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixonimport java.util.Map; 2674fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon 2774fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon/** 2874fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @hide 2974fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @deprecated This class was intended to be used by Gears. Since Gears was 3074fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * deprecated, so is this class. 3174fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon */ 3274fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon@Deprecated 3374fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixonpublic final class UrlInterceptRegistry { 3474fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon 3574fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon private final static String LOGTAG = "intercept"; 3674fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon 3774fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon private static boolean mDisabled = false; 3874fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon 3974fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon private static LinkedList mHandlerList; 4074fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon 4174fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon private static synchronized LinkedList getHandlers() { 4274fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon if(mHandlerList == null) 4374fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon mHandlerList = new LinkedList<UrlInterceptHandler>(); 4474fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon return mHandlerList; 4574fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon } 4674fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon 4774fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon /** 4874fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * set the flag to control whether url intercept is enabled or disabled 4974fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * 5074fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @param disabled true to disable the cache 5174fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * 5274fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @hide 5374fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @deprecated This class was intended to be used by Gears. Since Gears was 5474fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * deprecated, so is this class. 5574fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon */ 5674fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon @Deprecated 5774fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon public static synchronized void setUrlInterceptDisabled(boolean disabled) { 5874fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon mDisabled = disabled; 5974fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon } 6074fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon 6174fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon /** 6274fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * get the state of the url intercept, enabled or disabled 6374fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * 6474fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @return return if it is disabled 6574fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * 6674fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @hide 6774fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @deprecated This class was intended to be used by Gears. Since Gears was 6874fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * deprecated, so is this class. 6974fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon */ 7074fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon @Deprecated 7174fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon public static synchronized boolean urlInterceptDisabled() { 7274fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon return mDisabled; 7374fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon } 7474fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon 7574fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon /** 7674fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * Register a new UrlInterceptHandler. This handler will be called 7774fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * before any that were previously registered. 7874fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * 7974fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @param handler The new UrlInterceptHandler object 8074fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @return true if the handler was not previously registered. 8174fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * 8274fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @hide 8374fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @deprecated This class was intended to be used by Gears. Since Gears was 8474fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * deprecated, so is this class. 8574fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon */ 8674fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon @Deprecated 8774fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon public static synchronized boolean registerHandler( 8874fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon UrlInterceptHandler handler) { 8974fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon if (!getHandlers().contains(handler)) { 9074fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon getHandlers().addFirst(handler); 9174fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon return true; 9274fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon } else { 9374fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon return false; 9474fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon } 9574fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon } 9674fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon 9774fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon /** 9874fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * Unregister a previously registered UrlInterceptHandler. 9974fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * 10074fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @param handler A previously registered UrlInterceptHandler. 10174fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @return true if the handler was found and removed from the list. 10274fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * 10374fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @hide 10474fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @deprecated This class was intended to be used by Gears. Since Gears was 10574fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * deprecated, so is this class. 10674fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon */ 10774fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon @Deprecated 10874fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon public static synchronized boolean unregisterHandler( 10974fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon UrlInterceptHandler handler) { 11074fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon return getHandlers().remove(handler); 11174fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon } 11274fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon 11374fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon /** 11474fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * Given an url, returns the CacheResult of the first 11574fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * UrlInterceptHandler interested, or null if none are. 11674fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * 11774fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @return A CacheResult containing surrogate content. 11874fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * 11974fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @hide 12074fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @deprecated This class was intended to be used by Gears. Since Gears was 12174fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * deprecated, so is this class. 12274fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon */ 12374fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon @Deprecated 12474fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon public static synchronized CacheResult getSurrogate( 12574fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon String url, Map<String, String> headers) { 12674fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon if (urlInterceptDisabled()) { 12774fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon return null; 12874fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon } 12974fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon Iterator iter = getHandlers().listIterator(); 13074fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon while (iter.hasNext()) { 13174fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon UrlInterceptHandler handler = (UrlInterceptHandler) iter.next(); 13274fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon CacheResult result = handler.service(url, headers); 13374fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon if (result != null) { 13474fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon return result; 13574fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon } 13674fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon } 13774fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon return null; 13874fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon } 13974fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon 14074fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon /** 14174fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * Given an url, returns the PluginData of the first 14274fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * UrlInterceptHandler interested, or null if none are or if 14374fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * intercepts are disabled. 14474fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * 14574fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @return A PluginData instance containing surrogate content. 14674fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * 14774fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @hide 14874fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * @deprecated This class was intended to be used by Gears. Since Gears was 14974fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon * deprecated, so is this class. 15074fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon */ 15174fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon @Deprecated 15274fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon public static synchronized PluginData getPluginData( 15374fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon String url, Map<String, String> headers) { 15474fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon if (urlInterceptDisabled()) { 15574fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon return null; 15674fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon } 15774fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon Iterator iter = getHandlers().listIterator(); 15874fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon while (iter.hasNext()) { 15974fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon UrlInterceptHandler handler = (UrlInterceptHandler) iter.next(); 16074fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon PluginData data = handler.getPluginData(url, headers); 16174fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon if (data != null) { 16274fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon return data; 16374fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon } 16474fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon } 16574fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon return null; 16674fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon } 16774fc73f62bd1ade8e94a6bba34bcd24d54400dd2Jonathan Dixon} 168