diff options
-rw-r--r-- | WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp | 8 | ||||
-rw-r--r-- | WebKit/android/WebCoreSupport/ChromeClientAndroid.h | 3 | ||||
-rw-r--r-- | WebKit/android/jni/WebViewCore.cpp | 24 | ||||
-rw-r--r-- | WebKit/android/jni/WebViewCore.h | 7 |
4 files changed, 42 insertions, 0 deletions
diff --git a/WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp b/WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp index 93869c3..6f8b7fe 100644 --- a/WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp +++ b/WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp @@ -333,6 +333,14 @@ void ChromeClientAndroid::reachedMaxAppCacheSize(int64_t spaceNeeded) } #endif +void ChromeClientAndroid::populateVisitedLinks() +{ + Page* page = m_webFrame->page(); + Frame* mainFrame = page->mainFrame(); + FrameView* view = mainFrame->view(); + android::WebViewCore::getWebViewCore(view)->populateVisitedLinks(&page->group()); +} + void ChromeClientAndroid::requestGeolocationPermissionForFrame(Frame* frame, Geolocation* geolocation) { ASSERT(geolocation); diff --git a/WebKit/android/WebCoreSupport/ChromeClientAndroid.h b/WebKit/android/WebCoreSupport/ChromeClientAndroid.h index 82a0164..4ac3d6c 100644 --- a/WebKit/android/WebCoreSupport/ChromeClientAndroid.h +++ b/WebKit/android/WebCoreSupport/ChromeClientAndroid.h @@ -120,6 +120,9 @@ namespace android { #if ENABLE(OFFLINE_WEB_APPLICATIONS) virtual void reachedMaxAppCacheSize(int64_t spaceNeeded); #endif + + virtual void populateVisitedLinks(); + // Methods used to request and provide Geolocation permissions. virtual void requestGeolocationPermissionForFrame(Frame*, Geolocation*); // Android-specific diff --git a/WebKit/android/jni/WebViewCore.cpp b/WebKit/android/jni/WebViewCore.cpp index 0885c07..6b4f813 100644 --- a/WebKit/android/jni/WebViewCore.cpp +++ b/WebKit/android/jni/WebViewCore.cpp @@ -66,6 +66,7 @@ #include "KeyboardCodes.h" #include "Node.h" #include "Page.h" +#include "PageGroup.h" #include "PlatformKeyboardEvent.h" #include "PlatformString.h" #include "PluginWidgetAndroid.h" @@ -180,6 +181,7 @@ struct WebViewCore::JavaGlue { jmethodID m_requestKeyboard; jmethodID m_exceededDatabaseQuota; jmethodID m_reachedMaxAppCacheSize; + jmethodID m_populateVisitedLinks; jmethodID m_geolocationPermissionsShowPrompt; jmethodID m_geolocationPermissionsHidePrompt; jmethodID m_addMessageToConsole; @@ -255,6 +257,7 @@ WebViewCore::WebViewCore(JNIEnv* env, jobject javaWebViewCore, WebCore::Frame* m m_javaGlue->m_requestKeyboard = GetJMethod(env, clazz, "requestKeyboard", "(Z)V"); m_javaGlue->m_exceededDatabaseQuota = GetJMethod(env, clazz, "exceededDatabaseQuota", "(Ljava/lang/String;Ljava/lang/String;JJ)V"); m_javaGlue->m_reachedMaxAppCacheSize = GetJMethod(env, clazz, "reachedMaxAppCacheSize", "(J)V"); + m_javaGlue->m_populateVisitedLinks = GetJMethod(env, clazz, "populateVisitedLinks", "()[Ljava/lang/String;"); m_javaGlue->m_geolocationPermissionsShowPrompt = GetJMethod(env, clazz, "geolocationPermissionsShowPrompt", "(Ljava/lang/String;)V"); m_javaGlue->m_geolocationPermissionsHidePrompt = GetJMethod(env, clazz, "geolocationPermissionsHidePrompt", "()V"); m_javaGlue->m_addMessageToConsole = GetJMethod(env, clazz, "addMessageToConsole", "(Ljava/lang/String;ILjava/lang/String;)V"); @@ -266,6 +269,8 @@ WebViewCore::WebViewCore(JNIEnv* env, jobject javaWebViewCore, WebCore::Frame* m m_scrollOffsetX = m_scrollOffsetY = 0; + PageGroup::setShouldTrackVisitedLinks(true); + reset(true); } @@ -2054,6 +2059,25 @@ void WebViewCore::reachedMaxAppCacheSize(const unsigned long long spaceNeeded) #endif } +void WebViewCore::populateVisitedLinks(WebCore::PageGroup* group) +{ + JNIEnv* env = JSC::Bindings::getJNIEnv(); + jobjectArray array = static_cast<jobjectArray>(env->CallObjectMethod(m_javaGlue->object(env).get(), m_javaGlue->m_populateVisitedLinks)); + if (!array) + return; + jsize len = env->GetArrayLength(array); + for (jsize i = 0; i < len; i++) { + jstring item = static_cast<jstring>(env->GetObjectArrayElement(array, i)); + const UChar* str = static_cast<const UChar*>(env->GetStringChars(item, NULL)); + jsize len = env->GetStringLength(item); + group->addVisitedLink(str, len); + env->ReleaseStringChars(item, str); + env->DeleteLocalRef(item); + } + env->DeleteLocalRef(array); +} + + void WebViewCore::geolocationPermissionsShowPrompt(const WebCore::String& origin) { JNIEnv* env = JSC::Bindings::getJNIEnv(); diff --git a/WebKit/android/jni/WebViewCore.h b/WebKit/android/jni/WebViewCore.h index 7dd8763..0537262 100644 --- a/WebKit/android/jni/WebViewCore.h +++ b/WebKit/android/jni/WebViewCore.h @@ -53,6 +53,7 @@ namespace WebCore { class RenderTextControl; class ScrollView; class TimerBase; + class PageGroup; } struct PluginWidgetAndroid; @@ -216,6 +217,12 @@ namespace android { */ void reachedMaxAppCacheSize(const unsigned long long spaceNeeded); + /** + * Set up the PageGroup's idea of which links have been visited, with the browser history. + * @param group the object to deliver the links to. + */ + void populateVisitedLinks(WebCore::PageGroup*); + /** * Instruct the browser to show a Geolocation permission prompt for the * specified origin. |