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 7377db9990777efd100bee4ec47568414ea039e99bSteve Block * must not have expired and must not be a session cookie, otherwise it 7477db9990777efd100bee4ec47568414ea039e99bSteve Block * will be ignored. 754e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * 764e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * @param url the URL for which the cookie is set 774e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * @param value the cookie as a string, using the format of the 'Set-Cookie' 78d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon * HTTP response header 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setCookie(String url, String value) { 81d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon throw new MustOverrideException(); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8577db9990777efd100bee4ec47568414ea039e99bSteve Block * Gets the cookies for the given URL. 864e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * 874e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * @param url the URL for which the cookies are requested 884e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * @return value the cookies as a string, using the format of the 'Cookie' 8977db9990777efd100bee4ec47568414ea039e99bSteve Block * HTTP request header 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getCookie(String url) { 92d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon throw new MustOverrideException(); 93469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen } 94469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen 95469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen /** 964e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * See {@link #getCookie(String)}. 974e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * 984e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * @param url the URL for which the cookies are requested 994e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * @param privateBrowsing whether to use the private browsing cookie jar 1004e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * @return value the cookies as a string, using the format of the 'Cookie' 10177db9990777efd100bee4ec47568414ea039e99bSteve Block * HTTP request header 10277db9990777efd100bee4ec47568414ea039e99bSteve Block * @hide Used by Browser, no intention to publish. 103469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen */ 104469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen public String getCookie(String url, boolean privateBrowsing) { 105d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon throw new MustOverrideException(); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1094e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * Gets cookie(s) for a given uri so that it can be set to "cookie:" in http 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * request header. 1114e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * 1124e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * @param uri the WebAddress for which the cookies are requested 1134e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * @return value the cookies as a string, using the format of the 'Cookie' 11477db9990777efd100bee4ec47568414ea039e99bSteve Block * HTTP request header 11577db9990777efd100bee4ec47568414ea039e99bSteve Block * @hide Used by RequestHandle, no intention to publish. 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public synchronized String getCookie(WebAddress uri) { 118d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon throw new MustOverrideException(); 119851730552166bf6e99ed60438ba91f09f36b829fKristian Monsen } 120851730552166bf6e99ed60438ba91f09f36b829fKristian Monsen 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12277db9990777efd100bee4ec47568414ea039e99bSteve Block * Removes all session cookies, which are cookies without an expiration 12377db9990777efd100bee4ec47568414ea039e99bSteve Block * date. 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void removeSessionCookie() { 126d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon throw new MustOverrideException(); 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13077db9990777efd100bee4ec47568414ea039e99bSteve Block * Removes all cookies. 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void removeAllCookie() { 133d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon throw new MustOverrideException(); 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13777db9990777efd100bee4ec47568414ea039e99bSteve Block * Gets whether there are stored cookies. 1384e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * 1394e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * @return true if there are stored cookies 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public synchronized boolean hasCookies() { 142d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon throw new MustOverrideException(); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 146d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon * See {@link #hasCookies()}. 1474e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * 1484e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * @param privateBrowsing whether to use the private browsing cookie jar 14977db9990777efd100bee4ec47568414ea039e99bSteve Block * @hide Used by Browser, no intention to publish. 150469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen */ 151469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen public synchronized boolean hasCookies(boolean privateBrowsing) { 152d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon throw new MustOverrideException(); 153469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen } 154469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen 155469aebbbd92a5300c5ebd6a420ca48976d21e9d1Kristian Monsen /** 15677db9990777efd100bee4ec47568414ea039e99bSteve Block * Removes all expired cookies. 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void removeExpiredCookie() { 159d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon throw new MustOverrideException(); 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1634e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * Flushes all cookies managed by the Chrome HTTP stack to flash. 164d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon * 165d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon * @hide Package level api, called from CookieSyncManager 166c40fc2c31a55f7e8312aa2721bf51fcb74bb3a95Iain Merrick */ 167d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon protected void flushCookieStore() { 168d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon throw new MustOverrideException(); 169c40fc2c31a55f7e8312aa2721bf51fcb74bb3a95Iain Merrick } 170c40fc2c31a55f7e8312aa2721bf51fcb74bb3a95Iain Merrick 171c40fc2c31a55f7e8312aa2721bf51fcb74bb3a95Iain Merrick /** 17277db9990777efd100bee4ec47568414ea039e99bSteve Block * Gets whether the application's {@link WebView} instances send and accept 17377db9990777efd100bee4ec47568414ea039e99bSteve Block * cookies for file scheme URLs. 1744e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * 1754e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * @return true if {@link WebView} instances send and accept cookies for 17677db9990777efd100bee4ec47568414ea039e99bSteve Block * file scheme URLs 17716d041cc9f4b67c37abf7dc5f8d49c7de81f2c84Kristian Monsen */ 178be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon // Static for backward compatibility. 17916d041cc9f4b67c37abf7dc5f8d49c7de81f2c84Kristian Monsen public static boolean allowFileSchemeCookies() { 180be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon return getInstance().allowFileSchemeCookiesImpl(); 181be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon } 182be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon 183be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon /** 1844e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * Implements {@link #allowFileSchemeCookies()}. 1854e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * 186be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon * @hide Only for use by WebViewProvider implementations 187be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon */ 188be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon protected boolean allowFileSchemeCookiesImpl() { 189be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon throw new MustOverrideException(); 19016d041cc9f4b67c37abf7dc5f8d49c7de81f2c84Kristian Monsen } 19116d041cc9f4b67c37abf7dc5f8d49c7de81f2c84Kristian Monsen 19216d041cc9f4b67c37abf7dc5f8d49c7de81f2c84Kristian Monsen /** 19377db9990777efd100bee4ec47568414ea039e99bSteve Block * Sets whether the application's {@link WebView} instances should send and 19477db9990777efd100bee4ec47568414ea039e99bSteve Block * accept cookies for file scheme URLs. 19577db9990777efd100bee4ec47568414ea039e99bSteve Block * Use of cookies with file scheme URLs is potentially insecure. Do not use 19677db9990777efd100bee4ec47568414ea039e99bSteve Block * this feature unless you can be sure that no unintentional sharing of 19777db9990777efd100bee4ec47568414ea039e99bSteve Block * cookie data can take place. 19816d041cc9f4b67c37abf7dc5f8d49c7de81f2c84Kristian Monsen * <p> 19977db9990777efd100bee4ec47568414ea039e99bSteve Block * Note that calls to this method will have no effect if made after a 20077db9990777efd100bee4ec47568414ea039e99bSteve Block * {@link WebView} or CookieManager instance has been created. 20116d041cc9f4b67c37abf7dc5f8d49c7de81f2c84Kristian Monsen */ 202be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon // Static for backward compatibility. 20316d041cc9f4b67c37abf7dc5f8d49c7de81f2c84Kristian Monsen public static void setAcceptFileSchemeCookies(boolean accept) { 204be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon getInstance().setAcceptFileSchemeCookiesImpl(accept); 205be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon } 206be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon 207be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon /** 2084e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * Implements {@link #setAcceptFileSchemeCookies(boolean)}. 2094e584df4cee8334bc371c04a67bcd0a32e2f9480Steve Block * 210be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon * @hide Only for use by WebViewProvider implementations 211be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon */ 212be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon protected void setAcceptFileSchemeCookiesImpl(boolean accept) { 213be58c40646ed5694136970cf0e88ffd6087a3c2aJonathan Dixon throw new MustOverrideException(); 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 216