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からもらいました.
CookieManager.getInstance().setCookie(url, value);
4,JavaBridge.cpp-->JWebCoreJavaBridge.java
JWebCoreJavaBridgeのcookiesはJavaBridgeから.cppが得た
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
ここまで分析して、追いかけていないので、暇があれば分析を続けます.
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
ここまで分析して、追いかけていないので、暇があれば分析を続けます.