Webkit-Cookies分析編


最近androidのwebkitのcookiesについて勉強していますが、以下は私の簡単なまとめです.
1,CookiesManager.java-->CookiesSyncManager.java-->WebviewDatabases.java
CookiesManager.JAvaはcookiesの全体的な管理であり、CookiesyncManagerを呼び出してRamの中のCookiesをdatabasesに格納する.したがってCookiesSyncManagerはcookiesをdatabaseに同期する管理であり、WebviewDatabasesのWebview.dbのcookiesテーブルはcookiesのストレージです.
2,CookiesSyncManager.java-->WebSyncManager.java
CookiesSyncManagerでは、ramからdatabasesまでcookiesをメンテナンスしているのはWebSyncManagerで、threadを開いてメンテナンスしています.
3,JWebCoreJavaBridge.java-->CookiesSyncManager.java
CookiesManagerはcookiesの全体的な管理であり、ramのcookiesはまずここでCookiesSyncManagerに渡されます.あのCookiesManagerのram cookiesはどこから手に入れたのですか?それはJWebCoreJavaBridgeからもらいました.
    private void setCookies(String url, String docUrl, String value) {
        if (value.contains("\r") || value.contains("
")) { // for security reason, filter out '\r' and '
' from the cookie int size = value.length(); StringBuilder buffer = new StringBuilder(size); int i = 0; while (i != -1 && i < size) { int ir = value.indexOf('\r', i); int in = value.indexOf('
', i); int newi = (ir == -1) ? in : (in == -1 ? ir : (ir < in ? ir : in)); if (newi > i) { buffer.append(value.subSequence(i, newi)); } else if (newi == -1) { buffer.append(value.subSequence(i, size)); break; } i = newi + 1; } value = buffer.toString(); } CookieManager.getInstance().setCookie(url, value); }

CookieManager.getInstance().setCookie(url, value);
4,JavaBridge.cpp-->JWebCoreJavaBridge.java
JWebCoreJavaBridgeのcookiesはJavaBridgeから.cppが得た
void
JavaBridge::setCookies(WebCore::KURL const& url, WebCore::KURL const& docUrl, WebCore::String const& value)
{
    JNIEnv* env = JSC::Bindings::getJNIEnv();
    const WebCore::String& urlStr = url.string();
    jstring jUrlStr = env->NewString(urlStr.characters(), urlStr.length());
    const WebCore::String& docUrlStr = docUrl.string();
    jstring jDocUrlStr = env->NewString(docUrlStr.characters(), docUrlStr.length());
    jstring jValueStr = env->NewString(value.characters(), value.length());

    AutoJObject obj = getRealObject(env, mJavaObject);
    env->CallVoidMethod(obj.get(), mSetCookies, jUrlStr, jDocUrlStr, jValueStr);
    env->DeleteLocalRef(jUrlStr);
    env->DeleteLocalRef(jDocUrlStr);
    env->DeleteLocalRef(jValueStr);
}

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
ここまで分析して、追いかけていないので、暇があれば分析を続けます.