Colorizing clicked-on links

Following review comments

Following review comments
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 @@
 }
 #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 @@
 #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 @@
     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 @@
     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 @@
 
     m_scrollOffsetX = m_scrollOffsetY = 0;
 
+    PageGroup::setShouldTrackVisitedLinks(true);
+
     reset(true);
 }
 
@@ -2054,6 +2059,25 @@
 #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 @@
     class RenderTextControl;
     class ScrollView;
     class TimerBase;
+    class PageGroup;
 }
 
 struct PluginWidgetAndroid;
@@ -216,6 +217,12 @@
          */
         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.