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