cookie调用网络层使用chromium包部分分析(转)

最近对android的webkit的cookies进行学习,下面是我的简单总结: 
1,CookiesManager.java-->CookiesSyncManager.java-->WebviewDatabases.java 
CookiesManager.java是对cookies的总体管理,它会调用CookiesSyncManager将Ram里面的Cookies存入到databases.所以CookiesSyncManager是对将cookies同步到database的管理,而WebviewDatabases里面的Webview.db的cookies表是对cookies的存储。 

2,CookiesSyncManager.java-->WebSyncManager.java 
CookiesSyncManager里面正在维护cookies从ram到databases的是WebSyncManager来做的,这里面是开一个thread来维护。 

3,JWebCoreJavaBridge.java-->CookiesSyncManager.java 
CookiesManager是对cookies的总体管理,那ram的cookies首先是这里传递给CookiesSyncManager的。那个CookiesManager的ram cookies又是从何处得来的呢?那就是从JWebCoreJavaBridge得到的。 

Java代码  收藏代码
  1. private void setCookies(String url, String docUrl, String value) {  
  2.     if (value.contains("\r") || value.contains("\n")) {  
  3.         // for security reason, filter out '\r' and '\n' from the cookie  
  4.         int size = value.length();  
  5.         StringBuilder buffer = new StringBuilder(size);  
  6.         int i = 0;  
  7.         while (i != -1 && i < size) {  
  8.             int ir = value.indexOf('\r', i);  
  9.             int in = value.indexOf('\n', i);  
  10.             int newi = (ir == -1) ? in : (in == -1 ? ir : (ir < in ? ir  
  11.                     : in));  
  12.             if (newi > i) {  
  13.                 buffer.append(value.subSequence(i, newi));  
  14.             } else if (newi == -1) {  
  15.                 buffer.append(value.subSequence(i, size));  
  16.                 break;  
  17.             }  
  18.             i = newi + 1;  
  19.         }  
  20.         value = buffer.toString();  
  21.     }  
  22.     CookieManager.getInstance().setCookie(url, value);  
  23. }  



CookieManager.getInstance().setCookie(url, value); 

4,JavaBridge.cpp-->JWebCoreJavaBridge.java 
JWebCoreJavaBridge的cookies是从JavaBridge.cpp得来的 

Java代码  收藏代码
  1. void  
  2. JavaBridge::setCookies(WebCore::KURL const& url, WebCore::KURL const& docUrl, WebCore::String const& value)  
  3. {  
  4.     JNIEnv* env = JSC::Bindings::getJNIEnv();  
  5.     const WebCore::String& urlStr = url.string();  
  6.     jstring jUrlStr = env->NewString(urlStr.characters(), urlStr.length());  
  7.     const WebCore::String& docUrlStr = docUrl.string();  
  8.     jstring jDocUrlStr = env->NewString(docUrlStr.characters(), docUrlStr.length());  
  9.     jstring jValueStr = env->NewString(value.characters(), value.length());  
  10.   
  11.     AutoJObject obj = getRealObject(env, mJavaObject);  
  12.     env->CallVoidMethod(obj.get(), mSetCookies, jUrlStr, jDocUrlStr, jValueStr);  
  13.     env->DeleteLocalRef(jUrlStr);  
  14.     env->DeleteLocalRef(jDocUrlStr);  
  15.     env->DeleteLocalRef(jValueStr);  
  16. }  



mSetCookies = env->GetMethodID(clazz, "setCookies", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"); 
env->CallVoidMethod(obj.get(), mSetCookies, jUrlStr, jDocUrlStr, jValueStr);
 

5,CookieClient.h-->JavaBridge.cpp 
JavaBridger.cpp是继承CookiesClient 
6,Cookies.cpp-->CookiesClien.h 

就分析到这里,就没往下追了,有空我继续分析。 

posted on 2012-07-11 15:49  亭子  阅读(741)  评论(0编辑  收藏  举报

导航