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