CookieManager.java revision 0ac81cb785241f49abc39ba639abddc33b891971
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.webkit;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.WebAddress;
2045a9a14006214e6478311ffcb980e766702d5a76Doug Zongker
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
2277db9990777efd100bee4ec47568414ea039e99bSteve Block * Manages the cookies used by an application's {@link WebView} instances.
2377db9990777efd100bee4ec47568414ea039e99bSteve Block * Cookies are manipulated according to RFC2109.
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
25939e5040b51539be561db1d18dec18196f201f5cJonathan Dixonpublic class CookieManager {
26d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon    /**
27d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon     * @hide Only for use by WebViewProvider implementations
28d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon     */
29d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon    protected CookieManager() {
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
32d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon    @Override
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected Object clone() throws CloneNotSupportedException {
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throw new CloneNotSupportedException("doesn't implement Cloneable");
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3877db9990777efd100bee4ec47568414ea039e99bSteve Block     * Gets the singleton CookieManager instance. If this method is used
3977db9990777efd100bee4ec47568414ea039e99bSteve Block     * before the application instantiates a {@link WebView} instance,
40c723e35336e764a1e708f1a4a8ee3f7bff711c0fSteve Block     * {@link CookieSyncManager#createInstance CookieSyncManager.createInstance(Context)}
41c723e35336e764a1e708f1a4a8ee3f7bff711c0fSteve Block     * must be called first.
42d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon     *
434e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * @return the singleton CookieManager instance
4406312cae6b0e00c4ccbe84e9c682de8d607897a9Patrick Scott     */
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static synchronized CookieManager getInstance() {
46d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        return WebViewFactory.getProvider().getCookieManager();
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5077db9990777efd100bee4ec47568414ea039e99bSteve Block     * Sets whether the application's {@link WebView} instances should send and
5177db9990777efd100bee4ec47568414ea039e99bSteve Block     * accept cookies.
524e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     *
534e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * @param accept whether {@link WebView} instances should send and accept
5477db9990777efd100bee4ec47568414ea039e99bSteve Block     *               cookies
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized void setAcceptCookie(boolean accept) {
57d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        throw new MustOverrideException();
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6177db9990777efd100bee4ec47568414ea039e99bSteve Block     * Gets whether the application's {@link WebView} instances send and accept
6277db9990777efd100bee4ec47568414ea039e99bSteve Block     * cookies.
634e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     *
644e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * @return true if {@link WebView} instances send and accept cookies
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized boolean acceptCookie() {
67d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        throw new MustOverrideException();
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
70d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon     /**
7177db9990777efd100bee4ec47568414ea039e99bSteve Block     * Sets a cookie for the given URL. Any existing cookie with the same host,
7277db9990777efd100bee4ec47568414ea039e99bSteve Block     * path and name will be replaced with the new cookie. The cookie being set
730ac81cb785241f49abc39ba639abddc33b891971Hector Dearman     * will be ignored if it is expired.
744e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     *
754e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * @param url the URL for which the cookie is set
764e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * @param value the cookie as a string, using the format of the 'Set-Cookie'
77d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon     *              HTTP response header
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setCookie(String url, String value) {
80d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        throw new MustOverrideException();
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8477db9990777efd100bee4ec47568414ea039e99bSteve Block     * Gets the cookies for the given URL.
854e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     *
864e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * @param url the URL for which the cookies are requested
874e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * @return value the cookies as a string, using the format of the 'Cookie'
8877db9990777efd100bee4ec47568414ea039e99bSteve Block     *               HTTP request header
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getCookie(String url) {
91d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        throw new MustOverrideException();
92469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen    }
93469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen
94469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen    /**
954e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * See {@link #getCookie(String)}.
964e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     *
974e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * @param url the URL for which the cookies are requested
984e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * @param privateBrowsing whether to use the private browsing cookie jar
994e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * @return value the cookies as a string, using the format of the 'Cookie'
10077db9990777efd100bee4ec47568414ea039e99bSteve Block     *               HTTP request header
10177db9990777efd100bee4ec47568414ea039e99bSteve Block     * @hide Used by Browser, no intention to publish.
102469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen     */
103469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen    public String getCookie(String url, boolean privateBrowsing) {
104d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        throw new MustOverrideException();
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1084e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * Gets cookie(s) for a given uri so that it can be set to "cookie:" in http
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * request header.
1104e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     *
1114e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * @param uri the WebAddress for which the cookies are requested
1124e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * @return value the cookies as a string, using the format of the 'Cookie'
11377db9990777efd100bee4ec47568414ea039e99bSteve Block     *               HTTP request header
11477db9990777efd100bee4ec47568414ea039e99bSteve Block     * @hide Used by RequestHandle, no intention to publish.
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized String getCookie(WebAddress uri) {
117d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        throw new MustOverrideException();
118851730552166bf6e99ed60438ba91f09f36b829fKristian Monsen    }
119851730552166bf6e99ed60438ba91f09f36b829fKristian Monsen
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12177db9990777efd100bee4ec47568414ea039e99bSteve Block     * Removes all session cookies, which are cookies without an expiration
12277db9990777efd100bee4ec47568414ea039e99bSteve Block     * date.
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void removeSessionCookie() {
125d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        throw new MustOverrideException();
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12977db9990777efd100bee4ec47568414ea039e99bSteve Block     * Removes all cookies.
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void removeAllCookie() {
132d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        throw new MustOverrideException();
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
13677db9990777efd100bee4ec47568414ea039e99bSteve Block     * Gets whether there are stored cookies.
1374e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     *
1384e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * @return true if there are stored cookies
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public synchronized boolean hasCookies() {
141d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        throw new MustOverrideException();
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
145d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon     * See {@link #hasCookies()}.
1464e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     *
1474e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * @param privateBrowsing whether to use the private browsing cookie jar
14877db9990777efd100bee4ec47568414ea039e99bSteve Block     * @hide Used by Browser, no intention to publish.
149469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen     */
150469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen    public synchronized boolean hasCookies(boolean privateBrowsing) {
151d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        throw new MustOverrideException();
152469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen    }
153469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen
154469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen    /**
15577db9990777efd100bee4ec47568414ea039e99bSteve Block     * Removes all expired cookies.
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void removeExpiredCookie() {
158d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        throw new MustOverrideException();
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1624e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * Flushes all cookies managed by the Chrome HTTP stack to flash.
163d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon     *
164d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon     * @hide Package level api, called from CookieSyncManager
165c40fc2c31a55f7e8312aa2721bf51fcb74bb3a95Iain Merrick     */
166d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon    protected void flushCookieStore() {
167d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        throw new MustOverrideException();
168c40fc2c31a55f7e8312aa2721bf51fcb74bb3a95Iain Merrick    }
169c40fc2c31a55f7e8312aa2721bf51fcb74bb3a95Iain Merrick
170c40fc2c31a55f7e8312aa2721bf51fcb74bb3a95Iain Merrick    /**
17177db9990777efd100bee4ec47568414ea039e99bSteve Block     * Gets whether the application's {@link WebView} instances send and accept
17277db9990777efd100bee4ec47568414ea039e99bSteve Block     * cookies for file scheme URLs.
1734e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     *
1744e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * @return true if {@link WebView} instances send and accept cookies for
17577db9990777efd100bee4ec47568414ea039e99bSteve Block     *         file scheme URLs
17616d041cc9f4b67c37abf7dc5f8d49c7de81f2c84Kristian Monsen     */
177be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon    // Static for backward compatibility.
17816d041cc9f4b67c37abf7dc5f8d49c7de81f2c84Kristian Monsen    public static boolean allowFileSchemeCookies() {
179be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon        return getInstance().allowFileSchemeCookiesImpl();
180be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon    }
181be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon
182be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon    /**
1834e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * Implements {@link #allowFileSchemeCookies()}.
1844e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     *
185be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon     * @hide Only for use by WebViewProvider implementations
186be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon     */
187be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon    protected boolean allowFileSchemeCookiesImpl() {
188be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon        throw new MustOverrideException();
18916d041cc9f4b67c37abf7dc5f8d49c7de81f2c84Kristian Monsen    }
19016d041cc9f4b67c37abf7dc5f8d49c7de81f2c84Kristian Monsen
19116d041cc9f4b67c37abf7dc5f8d49c7de81f2c84Kristian Monsen    /**
19277db9990777efd100bee4ec47568414ea039e99bSteve Block     * Sets whether the application's {@link WebView} instances should send and
19377db9990777efd100bee4ec47568414ea039e99bSteve Block     * accept cookies for file scheme URLs.
19477db9990777efd100bee4ec47568414ea039e99bSteve Block     * Use of cookies with file scheme URLs is potentially insecure. Do not use
19577db9990777efd100bee4ec47568414ea039e99bSteve Block     * this feature unless you can be sure that no unintentional sharing of
19677db9990777efd100bee4ec47568414ea039e99bSteve Block     * cookie data can take place.
19716d041cc9f4b67c37abf7dc5f8d49c7de81f2c84Kristian Monsen     * <p>
19877db9990777efd100bee4ec47568414ea039e99bSteve Block     * Note that calls to this method will have no effect if made after a
19977db9990777efd100bee4ec47568414ea039e99bSteve Block     * {@link WebView} or CookieManager instance has been created.
20016d041cc9f4b67c37abf7dc5f8d49c7de81f2c84Kristian Monsen     */
201be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon    // Static for backward compatibility.
20216d041cc9f4b67c37abf7dc5f8d49c7de81f2c84Kristian Monsen    public static void setAcceptFileSchemeCookies(boolean accept) {
203be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon        getInstance().setAcceptFileSchemeCookiesImpl(accept);
204be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon    }
205be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon
206be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon    /**
2074e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     * Implements {@link #setAcceptFileSchemeCookies(boolean)}.
2084e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block     *
209be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon     * @hide Only for use by WebViewProvider implementations
210be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon     */
211be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon    protected void setAcceptFileSchemeCookiesImpl(boolean accept) {
212be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon        throw new MustOverrideException();
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
215