Move Browser test plugin from webkit project to development project.

Change how we set plugin path as we can support more than one path now.
diff --git a/Android.mk b/Android.mk
index 61cf66f..da29fd6 100644
--- a/Android.mk
+++ b/Android.mk
@@ -165,6 +165,7 @@
 	$(LOCAL_PATH)/WebCore/platform/sql \
 	$(LOCAL_PATH)/WebCore/platform/text \
 	$(LOCAL_PATH)/WebCore/plugins \
+	$(LOCAL_PATH)/WebCore/plugins/android \
 	$(LOCAL_PATH)/WebCore/rendering \
 	$(LOCAL_PATH)/WebCore/rendering/style \
 	$(LOCAL_PATH)/WebCore/storage \
@@ -259,9 +260,6 @@
 	WebKit/android/jni/WebCoreJniOnLoad.cpp
 include $(BUILD_SHARED_LIBRARY)
 
-# Build the plugin test separately from libwebcore
-include $(BASE_PATH)/WebKit/android/plugins/sample/Android.mk
-
 # Build the wds client
 include $(BASE_PATH)/WebKit/android/wds/client/Android.mk
 
diff --git a/WebCore/page/Settings.cpp b/WebCore/page/Settings.cpp
index 1815535..f55ac42 100644
--- a/WebCore/page/Settings.cpp
+++ b/WebCore/page/Settings.cpp
@@ -238,13 +238,6 @@
     m_arePluginsEnabled = arePluginsEnabled;
 }
 
-#ifdef ANDROID_PLUGINS
-void Settings::setPluginsPath(const String& pluginsPath)
-{
-    m_pluginsPath = pluginsPath;
-}
-#endif
-
 void Settings::setDatabasesEnabled(bool databasesEnabled)
 {
     m_databasesEnabled = databasesEnabled;
diff --git a/WebCore/page/Settings.h b/WebCore/page/Settings.h
index 925324f..5a9ee3a 100644
--- a/WebCore/page/Settings.h
+++ b/WebCore/page/Settings.h
@@ -127,11 +127,6 @@
         void setPluginsEnabled(bool);
         bool arePluginsEnabled() const { return m_arePluginsEnabled; }
 
-#ifdef ANDROID_PLUGINS
-        void setPluginsPath(const String& pluginsPath);
-        const String& pluginsPath() const { return m_pluginsPath; }
-#endif
-
         void setDatabasesEnabled(bool);
         bool databasesEnabled() const { return m_databasesEnabled; }
 
@@ -265,9 +260,6 @@
         
         String m_defaultTextEncodingName;
         String m_ftpDirectoryTemplatePath;
-#ifdef ANDROID_PLUGINS
-        String m_pluginsPath;
-#endif
         String m_localStorageDatabasePath;
         KURL m_userStyleSheetLocation;
         AtomicString m_standardFontFamily;
diff --git a/WebCore/plugins/PluginDatabase.cpp b/WebCore/plugins/PluginDatabase.cpp
index e3b86ae..155bd24 100644
--- a/WebCore/plugins/PluginDatabase.cpp
+++ b/WebCore/plugins/PluginDatabase.cpp
@@ -32,6 +32,11 @@
 #include "PluginPackage.h"
 #include <stdlib.h>
 
+#if PLATFORM(ANDROID)
+#include "JavaSharedClient.h"
+#include "PluginClient.h"
+#endif
+
 namespace WebCore {
 
 PluginDatabase* PluginDatabase::installedPlugins()
@@ -327,6 +332,11 @@
     paths.append(qtPaths);
 #endif
 
+#if PLATFORM(ANDROID)
+    if (android::JavaSharedClient::GetPluginClient())
+        return android::JavaSharedClient::GetPluginClient()->getPluginDirectories();
+#endif
+
     return paths;
 }
 
diff --git a/WebCore/plugins/PluginDatabase.h b/WebCore/plugins/PluginDatabase.h
index ccb3821..b05d334 100644
--- a/WebCore/plugins/PluginDatabase.h
+++ b/WebCore/plugins/PluginDatabase.h
@@ -63,9 +63,14 @@
 
         PluginPackage* findPlugin(const KURL&, String& mimeType);
 
-    private:
+#ifdef ANDROID_PLUGINS
         void setPluginDirectories(const Vector<String>& directories) { m_pluginDirectories = directories; }
+#endif
 
+    private:
+#ifndef ANDROID_PLUGINS
+        void setPluginDirectories(const Vector<String>& directories) { m_pluginDirectories = directories; }
+#endif
         void getPluginPathsInDirectories(HashSet<String>&) const;
         void getDeletedPlugins(PluginSet&) const;
 
diff --git a/WebKit/android/plugins/sample/main.h b/WebCore/plugins/android/PluginClient.h
similarity index 76%
rename from WebKit/android/plugins/sample/main.h
rename to WebCore/plugins/android/PluginClient.h
index 8bf520e..5dc300c 100644
--- a/WebKit/android/plugins/sample/main.h
+++ b/WebCore/plugins/android/PluginClient.h
@@ -1,5 +1,5 @@
 /*
- * Copyright 2008, The Android Open Source Project
+ * Copyright 2009, The Android Open Source Project
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -22,9 +22,23 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
- 
-#include <npapi.h>
-#include <npfunctions.h>
-#include <npruntime.h>
 
-extern NPNetscapeFuncs* browser;
+#ifndef PLUGINCLIENT_H_
+#define PLUGINCLIENT_H_
+
+#include "PlatformString.h"
+#include <wtf/Vector.h>
+
+using namespace WebCore;
+
+namespace android {
+
+    class PluginClient
+    {
+    public:
+        virtual ~PluginClient() {}
+        virtual Vector<String> getPluginDirectories() = 0;
+    };
+}
+
+#endif /* PLUGINCLIENT_H_ */
diff --git a/WebKit/android/jni/JavaBridge.cpp b/WebKit/android/jni/JavaBridge.cpp
index a713f17..6cb2167 100644
--- a/WebKit/android/jni/JavaBridge.cpp
+++ b/WebKit/android/jni/JavaBridge.cpp
@@ -33,6 +33,9 @@
 #include "JavaSharedClient.h"
 #include "KURL.h"
 #include "NetworkStateNotifier.h"
+#include "Page.h"
+#include "PluginClient.h"
+#include "PluginDatabase.h"
 #include "Timer.h"
 #include "TimerClient.h"
 #include "jni_utility.h"
@@ -55,7 +58,7 @@
 
 // ----------------------------------------------------------------------------
    
-class JavaBridge : public TimerClient, public CookieClient
+class JavaBridge : public TimerClient, public CookieClient, public PluginClient
 {
 public:
     JavaBridge(JNIEnv* env, jobject obj);
@@ -71,6 +74,8 @@
     virtual WebCore::String cookies(WebCore::KURL const& url);
     virtual bool cookiesEnabled();
 
+    virtual WTF::Vector<WebCore::String> getPluginDirectories();
+
     ////////////////////////////////////////////
 
     virtual void setSharedTimerCallback(void (*f)());
@@ -87,6 +92,7 @@
     static void SetNetworkOnLine(JNIEnv* env, jobject obj, jboolean online);
     static void SetDeferringTimers(JNIEnv* env, jobject obj, jboolean defer);
     static void ServiceFuncPtrQueue(JNIEnv*);
+    static void UpdatePluginDirectories(JNIEnv* env, jobject obj, jobjectArray array, jboolean reload);
 
 private:
     jobject     mJavaObject;
@@ -95,6 +101,7 @@
     jmethodID   mSetCookies;
     jmethodID   mCookies;
     jmethodID   mCookiesEnabled;
+    jmethodID   mGetPluginDirectories;
     jmethodID   mSignalFuncPtrQueue;
 };
 
@@ -110,6 +117,7 @@
     mSetCookies = env->GetMethodID(clazz, "setCookies", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
     mCookies = env->GetMethodID(clazz, "cookies", "(Ljava/lang/String;)Ljava/lang/String;");
     mCookiesEnabled = env->GetMethodID(clazz, "cookiesEnabled", "()Z");
+    mGetPluginDirectories = env->GetMethodID(clazz, "getPluginDirectories", "()[Ljava/lang/String;");
     mSignalFuncPtrQueue = env->GetMethodID(clazz, "signalServiceFuncPtrQueue", "()V");
 
     LOG_ASSERT(mSetSharedTimer, "Could not find method setSharedTimer");
@@ -120,8 +128,9 @@
 
     JavaSharedClient::SetTimerClient(this);
     JavaSharedClient::SetCookieClient(this);
-}   
-    
+    JavaSharedClient::SetPluginClient(this);
+}
+
 JavaBridge::~JavaBridge()
 {
     if (mJavaObject) {
@@ -192,6 +201,25 @@
     return (ret != 0);
 }
 
+WTF::Vector<WebCore::String>
+JavaBridge::getPluginDirectories()
+{
+    WTF::Vector<WebCore::String> directories;
+    JNIEnv* env = JSC::Bindings::getJNIEnv();
+    AutoJObject obj = getRealObject(env, mJavaObject);
+    jobjectArray array = (jobjectArray)
+            env->CallObjectMethod(obj.get(), mGetPluginDirectories);
+    int count = env->GetArrayLength(array);
+    for (int i = 0; i < count; i++) {
+        jstring dir = (jstring) env->GetObjectArrayElement(array, i);
+        directories.append(to_string(env, dir));
+        env->DeleteLocalRef(dir);
+    }
+    env->DeleteLocalRef(array);
+    checkException(env);
+    return directories;
+}
+
 void
 JavaBridge::setSharedTimerCallback(void (*f)())
 {
@@ -260,6 +288,23 @@
     JavaSharedClient::ServiceFunctionPtrQueue();
 }
 
+void JavaBridge::UpdatePluginDirectories(JNIEnv* env, jobject obj,
+        jobjectArray array, jboolean reload) {
+    WTF::Vector<WebCore::String> directories;
+    int count = env->GetArrayLength(array);
+    for (int i = 0; i < count; i++) {
+        jstring dir = (jstring) env->GetObjectArrayElement(array, i);
+        directories.append(to_string(env, dir));
+        env->DeleteLocalRef(dir);
+    }
+    checkException(env);
+    WebCore::PluginDatabase *pluginDatabase =
+            WebCore::PluginDatabase::installedPlugins();
+    pluginDatabase->setPluginDirectories(directories);
+    // refreshPlugins() should refresh both PluginDatabase and Page's PluginData
+    WebCore::Page::refreshPlugins(reload);
+}
+
 // ----------------------------------------------------------------------------
 
 /*
@@ -279,6 +324,8 @@
         (void*) JavaBridge::SetNetworkOnLine },
     { "nativeServiceFuncPtrQueue", "()V",
         (void*) JavaBridge::ServiceFuncPtrQueue },
+    { "nativeUpdatePluginDirectories", "([Ljava/lang/String;Z)V",
+        (void*) JavaBridge::UpdatePluginDirectories }
 };
 
 int register_javabridge(JNIEnv* env)
diff --git a/WebKit/android/jni/JavaSharedClient.cpp b/WebKit/android/jni/JavaSharedClient.cpp
index fcccd85..3ddf726 100644
--- a/WebKit/android/jni/JavaSharedClient.cpp
+++ b/WebKit/android/jni/JavaSharedClient.cpp
@@ -40,6 +40,11 @@
         return gCookieClient;
     }
 
+    PluginClient* JavaSharedClient::GetPluginClient()
+    {
+        return gPluginClient;
+    }
+
     void JavaSharedClient::SetTimerClient(TimerClient* client)
     {
         gTimerClient = client;
@@ -50,8 +55,14 @@
         gCookieClient = client;
     }
 
+    void JavaSharedClient::SetPluginClient(PluginClient* client)
+    {
+        gPluginClient = client;
+    }
+
     TimerClient*    JavaSharedClient::gTimerClient = NULL;
     CookieClient*   JavaSharedClient::gCookieClient = NULL;
+    PluginClient*   JavaSharedClient::gPluginClient = NULL;
 
     ///////////////////////////////////////////////////////////////////////////
     
diff --git a/WebKit/android/jni/JavaSharedClient.h b/WebKit/android/jni/JavaSharedClient.h
index 05788e1..69c05ce 100644
--- a/WebKit/android/jni/JavaSharedClient.h
+++ b/WebKit/android/jni/JavaSharedClient.h
@@ -30,24 +30,28 @@
 
     class TimerClient;
     class CookieClient;
+    class PluginClient;
 
     class JavaSharedClient
     {
     public:
         static TimerClient* GetTimerClient(); 
         static CookieClient* GetCookieClient();
+        static PluginClient* GetPluginClient();
 
         static void SetTimerClient(TimerClient* client);
         static void SetCookieClient(CookieClient* client);
+        static void SetPluginClient(PluginClient* client);
 
         // can be called from any thread, to be executed in webkit thread
         static void EnqueueFunctionPtr(void (*proc)(void*), void* payload);
         // only call this from webkit thread
         static void ServiceFunctionPtrQueue();
-        
+
     private:
         static TimerClient* gTimerClient;
         static CookieClient* gCookieClient;
+        static PluginClient* gPluginClient;
     };
 }
 #endif
diff --git a/WebKit/android/jni/WebSettings.cpp b/WebKit/android/jni/WebSettings.cpp
index 7741074..110cde0 100644
--- a/WebKit/android/jni/WebSettings.cpp
+++ b/WebKit/android/jni/WebSettings.cpp
@@ -41,10 +41,6 @@
 #include "DocLoader.h"
 #include "Page.h"
 #include "RenderTable.h"
-#ifdef ANDROID_PLUGINS
-#include "PlatformString.h"
-#include "PluginDatabase.h"
-#endif
 #include "Settings.h"
 #include "WebCoreFrameBridge.h"
 #include "WebCoreJni.h"
@@ -52,11 +48,6 @@
 #include <JNIHelp.h>
 #include <utils/misc.h>
 
-namespace WebCore {
-// Defined in FileSystemAndroid.cpp
-extern String sPluginPath;
-}
-
 namespace android {
 
 struct FieldIds {
@@ -91,9 +82,6 @@
 #endif
         mJavaScriptEnabled = env->GetFieldID(clazz, "mJavaScriptEnabled", "Z");
         mPluginsEnabled = env->GetFieldID(clazz, "mPluginsEnabled", "Z");
-#ifdef ANDROID_PLUGINS
-        mPluginsPath = env->GetFieldID(clazz, "mPluginsPath", "Ljava/lang/String;");
-#endif
 #if ENABLE(DATABASE)
         mDatabaseEnabled = env->GetFieldID(clazz, "mDatabaseEnabled", "Z");
         mDatabasePath = env->GetFieldID(clazz, "mDatabasePath", "Ljava/lang/String;");
@@ -129,9 +117,6 @@
 #endif
         LOG_ASSERT(mJavaScriptEnabled, "Could not find field mJavaScriptEnabled");
         LOG_ASSERT(mPluginsEnabled, "Could not find field mPluginsEnabled");
-#ifdef ANDROID_PLUGINS
-        LOG_ASSERT(mPluginsPath, "Could not find field mPluginsPath");
-#endif
 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
         LOG_ASSERT(mAppCacheEnabled, "Could not find field mAppCacheEnabled");
         LOG_ASSERT(mAppCachePath, "Could not find field mAppCachePath");
@@ -173,9 +158,6 @@
 #endif
     jfieldID mJavaScriptEnabled;
     jfieldID mPluginsEnabled;
-#ifdef ANDROID_PLUGINS
-    jfieldID mPluginsPath;
-#endif
 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
     jfieldID mAppCacheEnabled;
     jfieldID mAppCachePath;
@@ -299,46 +281,6 @@
         flag = env->GetBooleanField(obj, gFieldIds->mPluginsEnabled);
         s->setPluginsEnabled(flag);
 
-#ifdef ANDROID_PLUGINS
-        ::WebCore::PluginDatabase *pluginDatabase =
-                  ::WebCore::PluginDatabase::installedPlugins();
-        str = (jstring)env->GetObjectField(obj, gFieldIds->mPluginsPath);
-        if (str) {
-            WebCore::String pluginsPath = to_string(env, str);
-            // When a new browser Tab is created, the corresponding
-            // Java WebViewCore object will sync (with the native
-            // side) its associated WebSettings at initialization
-            // time. However, at that point, the WebSettings object's
-            // mPluginsPaths member is set to the empty string. The
-            // real plugin path will be set later by the tab and the
-            // WebSettings will be synced again.
-            //
-            // There is no point in instructing WebCore's
-            // PluginDatabase instance to set the plugin path to the
-            // empty string. Furthermore, if the PluginDatabase
-            // instance is already initialized, setting the path to
-            // the empty string will cause the PluginDatabase to
-            // forget about the plugin files it has already
-            // inspected. When the path is subsequently set to the
-            // correct value, the PluginDatabase will attempt to load
-            // and initialize plugins that are already loaded and
-            // initialized.
-            if (pluginsPath.length()) {
-                s->setPluginsPath(pluginsPath);
-                // Set the plugin directories to this single entry.
-                WTF::Vector< ::WebCore::String > paths(1);
-                paths[0] = pluginsPath;
-                pluginDatabase->setPluginDirectories(paths);
-                // Set the home directory for plugin temporary files
-                WebCore::sPluginPath = paths[0];
-                // Reload plugins. We call Page::refreshPlugins() instead
-                // of pluginDatabase->refresh(), as we need to ensure that
-                // the list of mimetypes exposed by the browser are also
-                // updated.
-                WebCore::Page::refreshPlugins(false);
-            }
-        }
-#endif
 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
         flag = env->GetBooleanField(obj, gFieldIds->mAppCacheEnabled);
         s->setOfflineWebApplicationCacheEnabled(flag);
diff --git a/WebKit/android/jni/WebViewCore.cpp b/WebKit/android/jni/WebViewCore.cpp
index 1810859..a59b967 100644
--- a/WebKit/android/jni/WebViewCore.cpp
+++ b/WebKit/android/jni/WebViewCore.cpp
@@ -68,7 +68,6 @@
 #include "Page.h"
 #include "PlatformKeyboardEvent.h"
 #include "PlatformString.h"
-#include "PluginInfoStore.h"
 #include "PluginWidgetAndroid.h"
 #include "Position.h"
 #include "ProgressTracker.h"
@@ -2561,18 +2560,6 @@
 #endif
 }
 
-static void RefreshPlugins(JNIEnv *env,
-                                 jobject obj,
-                                 jboolean reloadOpenPages)
-{
-#ifdef ANDROID_INSTRUMENT
-    TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
-#endif
-    // Refresh the list of plugins, optionally reloading all open
-    // pages.
-    WebCore::refreshPlugins(reloadOpenPages);
-}
-
 static void RegisterURLSchemeAsLocal(JNIEnv* env, jobject obj, jstring scheme) {
 #ifdef ANDROID_INSTRUMENT
     TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
@@ -2686,8 +2673,6 @@
         (void*) SetBackgroundColor },
     { "nativeGetSelection", "(Landroid/graphics/Region;)Ljava/lang/String;",
         (void*) GetSelection },
-    { "nativeRefreshPlugins", "(Z)V",
-        (void*) RefreshPlugins },
     { "nativeRegisterURLSchemeAsLocal", "(Ljava/lang/String;)V",
         (void*) RegisterURLSchemeAsLocal },
     { "nativeDumpDomTree", "(Z)V",
diff --git a/WebKit/android/plugins/sample/Android.mk b/WebKit/android/plugins/sample/Android.mk
deleted file mode 100644
index 328ddc5..0000000
--- a/WebKit/android/plugins/sample/Android.mk
+++ /dev/null
@@ -1,50 +0,0 @@
-##
-##
-## Copyright 2008, The Android Open Source Project
-##
-## Redistribution and use in source and binary forms, with or without
-## modification, are permitted provided that the following conditions
-## are met:
-##  * Redistributions of source code must retain the above copyright
-##    notice, this list of conditions and the following disclaimer.
-##  * Redistributions in binary form must reproduce the above copyright
-##    notice, this list of conditions and the following disclaimer in the
-##    documentation and/or other materials provided with the distribution.
-##
-## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
-## EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-## PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
-## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-## PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-## OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-##
-
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
-	main.cpp \
-	PluginObject.cpp \
-	pluginGraphics.cpp
-
-LOCAL_C_INCLUDES += \
-	$(LOCAL_PATH) \
-	external/webkit/WebCore/bridge \
-	external/webkit/WebCore/plugins \
-	external/webkit/WebCore/platform/android/JavaVM \
-	external/webkit/WebKit/android/plugins
-
-LOCAL_SRC_FILES := $(LOCAL_SRC_FILES)
-LOCAL_CFLAGS += -fvisibility=hidden 
-LOCAL_PRELINK_MODULE:=false
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-
-LOCAL_MODULE:= browsertestplugin
-
-include $(BUILD_SHARED_LIBRARY)
-
diff --git a/WebKit/android/plugins/sample/PluginObject.cpp b/WebKit/android/plugins/sample/PluginObject.cpp
deleted file mode 100644
index 5499072..0000000
--- a/WebKit/android/plugins/sample/PluginObject.cpp
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
- consideration of your agreement to the following terms, and your use, installation, 
- modification or redistribution of this Apple software constitutes acceptance of these 
- terms.  If you do not agree with these terms, please do not use, install, modify or 
- redistribute this Apple software.
- 
- In consideration of your agreement to abide by the following terms, and subject to these 
- terms, Apple grants you a personal, non-exclusive license, under AppleÕs copyrights in 
- this original Apple software (the "Apple Software"), to use, reproduce, modify and 
- redistribute the Apple Software, with or without modifications, in source and/or binary 
- forms; provided that if you redistribute the Apple Software in its entirety and without 
- modifications, you must retain this notice and the following text and disclaimers in all 
- such redistributions of the Apple Software.  Neither the name, trademarks, service marks 
- or logos of Apple Computer, Inc. may be used to endorse or promote products derived from 
- the Apple Software without specific prior written permission from Apple. Except as expressly
- stated in this notice, no other rights or licenses, express or implied, are granted by Apple
- herein, including but not limited to any patent rights that may be infringed by your 
- derivative works or by other works in which the Apple Software may be incorporated.
- 
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES, 
- EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, 
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS 
- USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
- 
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL 
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
-          OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, 
- REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND 
- WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR 
- OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdlib.h>
-#include "main.h"
-#include "PluginObject.h"
-
-static void pluginInvalidate(NPObject *obj);
-static bool pluginHasProperty(NPObject *obj, NPIdentifier name);
-static bool pluginHasMethod(NPObject *obj, NPIdentifier name);
-static bool pluginGetProperty(NPObject *obj, NPIdentifier name, NPVariant *variant);
-static bool pluginSetProperty(NPObject *obj, NPIdentifier name, const NPVariant *variant);
-static bool pluginInvoke(NPObject *obj, NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result);
-static bool pluginInvokeDefault(NPObject *obj, const NPVariant *args, uint32_t argCount, NPVariant *result);
-static NPObject *pluginAllocate(NPP npp, NPClass *theClass);
-static void pluginDeallocate(NPObject *obj);
-static bool pluginRemoveProperty(NPObject *npobj, NPIdentifier name);
-static bool pluginEnumerate(NPObject *npobj, NPIdentifier **value, uint32_t *count);
-
-
-
-static NPClass pluginClass = { 
-    NP_CLASS_STRUCT_VERSION,
-    pluginAllocate, 
-    pluginDeallocate, 
-    pluginInvalidate,
-    pluginHasMethod,
-    pluginInvoke,
-    pluginInvokeDefault,
-    pluginHasProperty,
-    pluginGetProperty,
-    pluginSetProperty,
-    pluginRemoveProperty,
-    pluginEnumerate
-};
- 
-NPClass *getPluginClass(void)
-{
-    return &pluginClass;
-}
-
-static bool identifiersInitialized = false;
-
-#define ID_TESTFILE_PROPERTY            0
-#define NUM_PROPERTY_IDENTIFIERS        1
-
-static NPIdentifier pluginPropertyIdentifiers[NUM_PROPERTY_IDENTIFIERS];
-static const NPUTF8 *pluginPropertyIdentifierNames[NUM_PROPERTY_IDENTIFIERS] = {
-    "testfile"
-};
-
-#define ID_GETTESTFILE_METHOD                   0
-#define NUM_METHOD_IDENTIFIERS                  1
-
-static NPIdentifier pluginMethodIdentifiers[NUM_METHOD_IDENTIFIERS];
-static const NPUTF8 *pluginMethodIdentifierNames[NUM_METHOD_IDENTIFIERS] = {
-    "getTestFile"
-};
-
-static void initializeIdentifiers(void)
-{
-    browser->getstringidentifiers(pluginPropertyIdentifierNames, NUM_PROPERTY_IDENTIFIERS, pluginPropertyIdentifiers);
-    browser->getstringidentifiers(pluginMethodIdentifierNames, NUM_METHOD_IDENTIFIERS, pluginMethodIdentifiers);
-}
-
-static bool pluginHasProperty(NPObject *obj, NPIdentifier name)
-{
-    int i;
-    for (i = 0; i < NUM_PROPERTY_IDENTIFIERS; i++)
-        if (name == pluginPropertyIdentifiers[i])
-            return true;
-    return false;
-}
-
-static bool pluginHasMethod(NPObject *obj, NPIdentifier name)
-{
-    int i;
-    for (i = 0; i < NUM_METHOD_IDENTIFIERS; i++)
-        if (name == pluginMethodIdentifiers[i])
-            return true;
-    return false;
-}
-
-static bool pluginGetProperty(NPObject *obj, NPIdentifier name, NPVariant *variant)
-{
-    PluginObject *plugin = (PluginObject *)obj;
-    if (name == pluginPropertyIdentifiers[ID_TESTFILE_PROPERTY]) {
-        BOOLEAN_TO_NPVARIANT(true, *variant);
-        return true;
-    }
-    return false;
-}
-
-static bool pluginSetProperty(NPObject *obj, NPIdentifier name, const NPVariant *variant)
-{
-    return false;
-}
-
-static bool pluginInvoke(NPObject *obj, NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result)
-{
-    PluginObject *plugin = (PluginObject *)obj;
-    if (name == pluginMethodIdentifiers[ID_GETTESTFILE_METHOD]) {
-        return true;
-    }
-    return false;
-}
-
-static bool pluginInvokeDefault(NPObject *obj, const NPVariant *args, uint32_t argCount, NPVariant *result)
-{
-    return false;
-}
-
-static void pluginInvalidate(NPObject *obj)
-{
-    // Release any remaining references to JavaScript objects.
-}
-
-static NPObject *pluginAllocate(NPP npp, NPClass *theClass)
-{
-    PluginObject *newInstance = (PluginObject*) malloc(sizeof(PluginObject));
-    newInstance->header._class = theClass;
-    newInstance->header.referenceCount = 1;
-    
-    if (!identifiersInitialized) {
-        identifiersInitialized = true;
-        initializeIdentifiers();
-    }
-    
-    newInstance->npp = npp;
-
-    return &newInstance->header;
-}
-
-static void pluginDeallocate(NPObject *obj) 
-{
-    free(obj);
-}
-
-static bool pluginRemoveProperty(NPObject *npobj, NPIdentifier name)
-{
-    return false;
-}
-
-static bool pluginEnumerate(NPObject *npobj, NPIdentifier **value, uint32_t *count)
-{
-    return false;
-}
-
diff --git a/WebKit/android/plugins/sample/PluginObject.h b/WebKit/android/plugins/sample/PluginObject.h
deleted file mode 100644
index ae8963d..0000000
--- a/WebKit/android/plugins/sample/PluginObject.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
- consideration of your agreement to the following terms, and your use, installation, 
- modification or redistribution of this Apple software constitutes acceptance of these 
- terms.  If you do not agree with these terms, please do not use, install, modify or 
- redistribute this Apple software.
- 
- In consideration of your agreement to abide by the following terms, and subject to these 
- terms, Apple grants you a personal, non-exclusive license, under AppleÕs copyrights in 
- this original Apple software (the "Apple Software"), to use, reproduce, modify and 
- redistribute the Apple Software, with or without modifications, in source and/or binary 
- forms; provided that if you redistribute the Apple Software in its entirety and without 
- modifications, you must retain this notice and the following text and disclaimers in all 
- such redistributions of the Apple Software.  Neither the name, trademarks, service marks 
- or logos of Apple Computer, Inc. may be used to endorse or promote products derived from 
- the Apple Software without specific prior written permission from Apple. Except as expressly
- stated in this notice, no other rights or licenses, express or implied, are granted by Apple
- herein, including but not limited to any patent rights that may be infringed by your 
- derivative works or by other works in which the Apple Software may be incorporated.
- 
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES, 
- EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, 
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS 
- USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
- 
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL 
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
-          OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, 
- REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND 
- WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR 
- OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef PluginObject__DEFINED
-#define PluginObject__DEFINED
-
-#include "npapi.h"
-
-struct ANPCanvas;
-struct ANPAudioTrack;
-
-class Animation {
-public:
-    Animation(NPP inst) : m_inst(inst) {}
-    virtual ~Animation() {}
-    virtual void draw(ANPCanvas*) = 0;
-    
-    NPP inst() const { return m_inst; }
-    
-private:
-    NPP m_inst;
-};
-
-typedef struct PluginObject {
-    NPObject header;
-    NPP npp;
-    NPWindow* window;
-    Animation* anim;
-    ANPAudioTrack* track;
-    int32_t mUnichar;
-    
-    bool mTestTimers;
-    uint32_t mStartTime;
-    uint32_t mPrevTime;
-    int      mTimerCount;
-} PluginObject;
-
-NPClass *getPluginClass(void);
-
-#endif // PluginObject__DEFINED
diff --git a/WebKit/android/plugins/sample/main.cpp b/WebKit/android/plugins/sample/main.cpp
deleted file mode 100644
index 4abc07c..0000000
--- a/WebKit/android/plugins/sample/main.cpp
+++ /dev/null
@@ -1,435 +0,0 @@
-/*
- * Copyright 2008, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include "main.h"
-#include "PluginObject.h"
-#include "pluginGraphics.h"
-#include "android_npapi.h"
-
-NPNetscapeFuncs* browser;
-#define EXPORT __attribute__((visibility("default")))
-
-NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, 
-        char* argn[], char* argv[], NPSavedData* saved);
-NPError NPP_Destroy(NPP instance, NPSavedData** save);
-NPError NPP_SetWindow(NPP instance, NPWindow* window);
-NPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream* stream, 
-        NPBool seekable, uint16* stype);
-NPError NPP_DestroyStream(NPP instance, NPStream* stream, NPReason reason);
-int32   NPP_WriteReady(NPP instance, NPStream* stream);
-int32   NPP_Write(NPP instance, NPStream* stream, int32 offset, int32 len, 
-        void* buffer);
-void    NPP_StreamAsFile(NPP instance, NPStream* stream, const char* fname);
-void    NPP_Print(NPP instance, NPPrint* platformPrint);
-int16   NPP_HandleEvent(NPP instance, void* event);
-void    NPP_URLNotify(NPP instance, const char* URL, NPReason reason, 
-        void* notifyData);
-NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value);
-NPError NPP_SetValue(NPP instance, NPNVariable variable, void *value);
-
-extern "C" {
-EXPORT NPError NP_Initialize(NPNetscapeFuncs* browserFuncs, NPPluginFuncs* pluginFuncs, void *java_env, void *application_context);
-EXPORT NPError NP_GetValue(NPP instance, NPPVariable variable, void *value);
-EXPORT const char* NP_GetMIMEDescription(void);
-EXPORT void NP_Shutdown(void); 
-};
-
-ANPAudioTrackInterfaceV0    gSoundI;
-ANPCanvasInterfaceV0        gCanvasI;
-ANPLogInterfaceV0           gLogI;
-ANPPaintInterfaceV0         gPaintI;
-ANPPathInterfaceV0          gPathI;
-ANPTypefaceInterfaceV0      gTypefaceI;
-
-#define ARRAY_COUNT(array)      (sizeof(array) / sizeof(array[0]))
-
-NPError NP_Initialize(NPNetscapeFuncs* browserFuncs, NPPluginFuncs* pluginFuncs, void *java_env, void *application_context)
-{
-    // Make sure we have a function table equal or larger than we are built against.
-    if (browserFuncs->size < sizeof(NPNetscapeFuncs)) {
-        return NPERR_GENERIC_ERROR;
-    }
-    
-    // Copy the function table (structure)
-    browser = (NPNetscapeFuncs*) malloc(sizeof(NPNetscapeFuncs));
-    memcpy(browser, browserFuncs, sizeof(NPNetscapeFuncs));
-    
-    // Build the plugin function table
-    pluginFuncs->version = 11;
-    pluginFuncs->size = sizeof(pluginFuncs);
-    pluginFuncs->newp = NPP_New;
-    pluginFuncs->destroy = NPP_Destroy;
-    pluginFuncs->setwindow = NPP_SetWindow;
-    pluginFuncs->newstream = NPP_NewStream;
-    pluginFuncs->destroystream = NPP_DestroyStream;
-    pluginFuncs->asfile = NPP_StreamAsFile;
-    pluginFuncs->writeready = NPP_WriteReady;
-    pluginFuncs->write = (NPP_WriteProcPtr)NPP_Write;
-    pluginFuncs->print = NPP_Print;
-    pluginFuncs->event = NPP_HandleEvent;
-    pluginFuncs->urlnotify = NPP_URLNotify;
-    pluginFuncs->getvalue = NPP_GetValue;
-    pluginFuncs->setvalue = NPP_SetValue;
-
-    static const struct {
-        NPNVariable     v;
-        uint32_t        size;
-        ANPInterface*   i;
-    } gPairs[] = {
-        { kLogInterfaceV0_ANPGetValue,          sizeof(gLogI),      &gLogI },
-        { kCanvasInterfaceV0_ANPGetValue,       sizeof(gCanvasI),   &gCanvasI },
-        { kPaintInterfaceV0_ANPGetValue,        sizeof(gPaintI),    &gPaintI },
-        { kPathInterfaceV0_ANPGetValue,         sizeof(gPathI),     &gPathI },
-        { kTypefaceInterfaceV0_ANPGetValue,     sizeof(gPaintI),    &gTypefaceI },
-        { kAudioTrackInterfaceV0_ANPGetValue,   sizeof(gSoundI),    &gSoundI },
-    };
-    for (size_t i = 0; i < ARRAY_COUNT(gPairs); i++) {
-        gPairs[i].i->inSize = gPairs[i].size;
-        NPError err = browser->getvalue(NULL, gPairs[i].v, gPairs[i].i);
-        if (err) {
-            return err;
-        }
-    }
-    
-    return NPERR_NO_ERROR;
-}
-
-void NP_Shutdown(void)
-{
-
-}
-
-const char *NP_GetMIMEDescription(void) 
-{
-    return "application/x-testplugin:tst:Test plugin mimetype is application/x-testplugin";
-}
-
-NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc,
-                char* argn[], char* argv[], NPSavedData* saved)
-{
-    PluginObject *obj = NULL;
-
-    // Scripting functions appeared in NPAPI version 14
-    if (browser->version >= 14) {
-        instance->pdata = browser->createobject (instance, getPluginClass());
-        obj = static_cast<PluginObject*>(instance->pdata);
-        bzero(obj, sizeof(*obj));
-    }
-    
-    uint32_t bits;
-    NPError err = browser->getvalue(instance, kSupportedDrawingModel_ANPGetValue, &bits);
-    if (err) {
-        gLogI.log(instance, kError_ANPLogType, "supported model err %d", err);
-        return err;
-    }
-    
-    ANPDrawingModel model = kBitmap_ANPDrawingModel;
-
-    int count = argc;
-    for (int i = 0; i < count; i++) {
-        if (!strcmp(argn[i], "DrawingModel")) {
-            if (!strcmp(argv[i], "Bitmap")) {
-                model = kBitmap_ANPDrawingModel;
-            }
-            if (!strcmp(argv[i], "Canvas")) {
-            //    obj->mTestTimers = true;
-            }
-            gLogI.log(instance, kDebug_ANPLogType, "------ %p DrawingModel is %d", instance, model);
-            break;
-        }
-    }
-
-    // comment this out to draw via bitmaps (the default)
-    err = browser->setvalue(instance, kRequestDrawingModel_ANPSetValue,
-                            reinterpret_cast<void*>(model));
-    if (err) {
-        gLogI.log(instance, kError_ANPLogType, "request model %d err %d", model, err);
-    }
-    return err;
-}
-
-NPError NPP_Destroy(NPP instance, NPSavedData** save)
-{
-    PluginObject *obj = (PluginObject*) instance->pdata;
-    delete obj->anim;
-    gSoundI.deleteTrack(obj->track);
-
-    return NPERR_NO_ERROR;
-}
-
-static void timer_oneshot(NPP instance, uint32 timerID) {
-    gLogI.log(instance, kDebug_ANPLogType, "-------- oneshot timer\n");
-}
-
-static int gTimerRepeatCount;
-static void timer_repeat(NPP instance, uint32 timerID) {
-    
-    gLogI.log(instance, kDebug_ANPLogType, "-------- repeat timer %d\n",
-              gTimerRepeatCount);
-    if (--gTimerRepeatCount == 0) {
-        browser->unscheduletimer(instance, timerID);
-    }
-}
-
-static void timer_neverfires(NPP instance, uint32 timerID) {
-    gLogI.log(instance, kError_ANPLogType, "-------- timer_neverfires!!!\n");
-}
-
-#define TIMER_INTERVAL     50
-
-static void timer_latency(NPP instance, uint32 timerID) {
-    PluginObject *obj = (PluginObject*) instance->pdata;
-
-    obj->mTimerCount += 1;
-
-    uint32_t now = getMSecs();
-    uint32_t interval = now - obj->mPrevTime;
-
-    uint32_t dur = now - obj->mStartTime;
-    uint32_t expectedDur = obj->mTimerCount * TIMER_INTERVAL;
-    int32_t drift = dur - expectedDur;
-    int32_t aveDrift = drift / obj->mTimerCount;
-    
-    obj->mPrevTime = now;
-    
-    gLogI.log(instance, kDebug_ANPLogType,
-              "-------- latency test: [%3d] interval %d expected %d, total %d expected %d, drift %d ave %d\n",
-              obj->mTimerCount, interval, TIMER_INTERVAL, dur, expectedDur,
-              drift, aveDrift);
-}
-
-NPError NPP_SetWindow(NPP instance, NPWindow* window)
-{
-    PluginObject *obj = (PluginObject*) instance->pdata;
-    
-    // Do nothing if browser didn't support NPN_CreateObject which would have created the PluginObject.
-    if (obj != NULL) {
-        obj->window = window;
-    }
-    
-    static bool gTestTimers;
-    if (!gTestTimers) {
-        gTestTimers = true;
-        // test for bogus timerID
-        browser->unscheduletimer(instance, 999999);
-        // test oneshot
-        browser->scheduletimer(instance, 100, false, timer_oneshot);
-        // test repeat
-        gTimerRepeatCount = 10;
-        browser->scheduletimer(instance, 50, true, timer_repeat);
-        // test unschedule immediately
-        uint32 id = browser->scheduletimer(instance, 100, false, timer_neverfires);
-        browser->unscheduletimer(instance, id);
-        // test double unschedlue (should be no-op)
-        browser->unscheduletimer(instance, id);
-    }
-    
-    if (obj->mTestTimers) {
-        browser->scheduletimer(instance, TIMER_INTERVAL, true, timer_latency);
-        obj->mStartTime = obj->mPrevTime = getMSecs();
-        obj->mTestTimers = false;
-    }
-    
-    browser->invalidaterect(instance, NULL);
-
-    return NPERR_NO_ERROR;
-}
- 
-
-NPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16* stype)
-{
-    *stype = NP_ASFILEONLY;
-    return NPERR_NO_ERROR;
-}
-
-NPError NPP_DestroyStream(NPP instance, NPStream* stream, NPReason reason)
-{
-    return NPERR_NO_ERROR;
-}
-
-int32 NPP_WriteReady(NPP instance, NPStream* stream)
-{
-    return 0;
-}
-
-int32 NPP_Write(NPP instance, NPStream* stream, int32 offset, int32 len, void* buffer)
-{
-    return 0;
-}
-
-void NPP_StreamAsFile(NPP instance, NPStream* stream, const char* fname)
-{
-}
-
-void NPP_Print(NPP instance, NPPrint* platformPrint)
-{
-
-}
-
-struct SoundPlay {
-    NPP             instance;
-    ANPAudioTrack*  track;
-    FILE*           file;
-};
-
-static void audioCallback(ANPAudioEvent evt, void* user, ANPAudioBuffer* buffer) {
-    switch (evt) {
-        case kMoreData_ANPAudioEvent: {
-            SoundPlay* play = reinterpret_cast<SoundPlay*>(user);
-            size_t amount = fread(buffer->bufferData, 1, buffer->size, play->file);
-            buffer->size = amount;
-            if (amount == 0) {
-                gSoundI.stop(play->track);
-                fclose(play->file);
-                play->file = NULL;
-                // need to notify our main thread to delete the track now
-            }
-            break;
-        }
-        default:
-            break;
-    }
-}
-
-static ANPAudioTrack* createTrack(NPP instance, const char path[]) {
-    FILE* f = fopen(path, "r");
-    gLogI.log(instance, kWarning_ANPLogType, "--- path %s FILE %p", path, f);
-    if (NULL == f) {
-        return NULL;
-    }
-    SoundPlay* play = new SoundPlay;
-    play->file = f;
-    play->track = gSoundI.newTrack(44100, kPCM16Bit_ANPSampleFormat, 2, audioCallback, play);
-    if (NULL == play->track) {
-        fclose(f);
-        delete play;
-        return NULL;
-    }
-    return play->track;
-}
-
-int16 NPP_HandleEvent(NPP instance, void* event)
-{
-    PluginObject *obj = reinterpret_cast<PluginObject*>(instance->pdata);
-    const ANPEvent* evt = reinterpret_cast<const ANPEvent*>(event);
-
-    switch (evt->eventType) {
-        case kDraw_ANPEventType:
-            switch (evt->data.drawContext.model) {
-                case kBitmap_ANPDrawingModel:
-                    drawPlugin(instance, evt->data.drawContext.data.bitmap,
-                               evt->data.drawContext.clip);
-                    return 1;
-                default:
-                    break;   // unknown drawing model
-            }
-
-        case kKey_ANPEventType:
-            gLogI.log(instance, kDebug_ANPLogType, "---- %p Key action=%d"
-                      " code=%d vcode=%d unichar=%d repeat=%d mods=%x", instance,
-                      evt->data.key.action,
-                      evt->data.key.nativeCode,
-                      evt->data.key.virtualCode,
-                      evt->data.key.unichar,
-                      evt->data.key.repeatCount,
-                      evt->data.key.modifiers);
-            if (evt->data.key.action == kDown_ANPKeyAction) {
-                obj->mUnichar = evt->data.key.unichar;
-                browser->invalidaterect(instance, NULL);
-            }
-            return 1;
-
-        case kTouch_ANPEventType:
-            gLogI.log(instance, kDebug_ANPLogType, "---- %p Touch action=%d [%d %d]",
-                      instance, evt->data.touch.action, evt->data.touch.x,
-                      evt->data.touch.y);
-            if (kUp_ANPTouchAction == evt->data.touch.action) {
-                if (NULL == obj->track) {
-                    obj->track = createTrack(instance, "/sdcard/sample.snd");
-                }
-                if (obj->track) {
-                    gLogI.log(instance, kDebug_ANPLogType, "track %p %d",
-                              obj->track, gSoundI.isStopped(obj->track));
-                    if (gSoundI.isStopped(obj->track)) {
-                        gSoundI.start(obj->track);
-                    } else {
-                        gSoundI.pause(obj->track);
-                    }
-                }
-            }
-            return 1;
-
-        default:
-            break;
-    }
-    return 0;   // unknown or unhandled event
-}
-
-void NPP_URLNotify(NPP instance, const char* url, NPReason reason, void* notifyData)
-{
-
-}
-
-EXPORT NPError NP_GetValue(NPP instance, NPPVariable variable, void *value) {
-
-    if (variable == NPPVpluginNameString) {
-        const char **str = (const char **)value;
-        *str = "Test Plugin";
-        return NPERR_NO_ERROR;
-    }
-    
-    if (variable == NPPVpluginDescriptionString) {
-        const char **str = (const char **)value;
-        *str = "Description of Test Plugin";
-        return NPERR_NO_ERROR;
-    }
-    
-    return NPERR_GENERIC_ERROR;
-}
-
-NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value)
-{
-    if (variable == NPPVpluginScriptableNPObject) {
-        void **v = (void **)value;
-        PluginObject *obj = (PluginObject*) instance->pdata;
-        
-        if (obj)
-            browser->retainobject((NPObject*)obj);
-        
-        *v = obj;
-        return NPERR_NO_ERROR;
-    }
-    
-    return NPERR_GENERIC_ERROR;
-}
-
-NPError NPP_SetValue(NPP instance, NPNVariable variable, void *value)
-{
-    return NPERR_GENERIC_ERROR;
-}
-
diff --git a/WebKit/android/plugins/sample/pluginGraphics.cpp b/WebKit/android/plugins/sample/pluginGraphics.cpp
deleted file mode 100644
index 7fbf7a7..0000000
--- a/WebKit/android/plugins/sample/pluginGraphics.cpp
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright 2008, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- 
-#include "pluginGraphics.h"
-
-#include "android_npapi.h"
-#include <stdio.h>
-#include <sys/time.h>
-#include <time.h>
-#include <math.h>
-#include <string.h>
-
-extern NPNetscapeFuncs*        browser;
-extern ANPLogInterfaceV0       gLogI;
-extern ANPCanvasInterfaceV0    gCanvasI;
-extern ANPPaintInterfaceV0     gPaintI;
-extern ANPPathInterfaceV0      gPathI;
-extern ANPTypefaceInterfaceV0  gTypefaceI;
-
-static void inval(NPP instance) {
-    browser->invalidaterect(instance, NULL);
-}
-
-static uint16 rnd16(float x, int inset) {
-    int ix = (int)roundf(x) + inset;
-    if (ix < 0) {
-        ix = 0;
-    }
-    return static_cast<uint16>(ix);
-}
-
-static void inval(NPP instance, const ANPRectF& r, bool doAA) {
-    const int inset = doAA ? -1 : 0;
-
-    PluginObject *obj = reinterpret_cast<PluginObject*>(instance->pdata);
-    NPRect inval;
-    inval.left = rnd16(r.left, inset);
-    inval.top = rnd16(r.top, inset);
-    inval.right = rnd16(r.right, -inset);
-    inval.bottom = rnd16(r.bottom, -inset);
-    browser->invalidaterect(instance, &inval);
-}
-
-uint32_t getMSecs() {
-    struct timeval tv;
-    gettimeofday(&tv, NULL);
-    return (uint32_t) (tv.tv_sec * 1000 + tv.tv_usec / 1000 ); // microseconds to milliseconds
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-class BallAnimation : public Animation {
-public:
-    BallAnimation(NPP inst);
-    virtual ~BallAnimation();
-    virtual void draw(ANPCanvas*);
-private:
-    float m_x;
-    float m_y;
-    float m_dx;
-    float m_dy;
-    
-    ANPRectF    m_oval;
-    ANPPaint*   m_paint;
-    
-    static const float SCALE = 0.1;
-};
-
-BallAnimation::BallAnimation(NPP inst) : Animation(inst) {
-    m_x = m_y = 0;
-    m_dx = 7 * SCALE;
-    m_dy = 5 * SCALE;
-    
-    memset(&m_oval, 0, sizeof(m_oval));
-
-    m_paint = gPaintI.newPaint();
-    gPaintI.setFlags(m_paint, gPaintI.getFlags(m_paint) | kAntiAlias_ANPPaintFlag);
-    gPaintI.setColor(m_paint, 0xFFFF0000);
-    gPaintI.setTextSize(m_paint, 24);
-    
-    ANPTypeface* tf = gTypefaceI.createFromName("serif", kItalic_ANPTypefaceStyle);
-    gPaintI.setTypeface(m_paint, tf);
-    gTypefaceI.unref(tf);
-}
-
-BallAnimation::~BallAnimation() {
-    gPaintI.deletePaint(m_paint);
-}
-
-static void bounce(float* x, float* dx, const float max) {
-    *x += *dx;
-    if (*x < 0) {
-        *x = 0;
-        if (*dx < 0) {
-            *dx = -*dx;
-        }
-    } else if (*x > max) {
-        *x = max;
-        if (*dx > 0) {
-            *dx = -*dx;
-        }
-    }
-}
-
-void BallAnimation::draw(ANPCanvas* canvas) {
-    NPP instance = this->inst();
-    PluginObject *obj = (PluginObject*) instance->pdata;
-    const float OW = 20;
-    const float OH = 20;
-    const int W = obj->window->width;
-    const int H = obj->window->height;
-
-    inval(instance, m_oval, true);  // inval the old
-    m_oval.left = m_x;
-    m_oval.top = m_y;
-    m_oval.right = m_x + OW;
-    m_oval.bottom = m_y + OH;
-    inval(instance, m_oval, true);  // inval the new
-
-    gCanvasI.drawColor(canvas, 0xFFFFFFFF);
-
-    // test out the Path API
-    {
-        ANPPath* path = gPathI.newPath();
-
-        float cx = W * 0.5f;
-        float cy = H * 0.5f;
-        gPathI.moveTo(path, 0, 0);
-        gPathI.quadTo(path, cx, cy, W, 0);
-        gPathI.quadTo(path, cx, cy, W, H);
-        gPathI.quadTo(path, cx, cy, 0, H);
-        gPathI.quadTo(path, cx, cy, 0, 0);
-
-        gPaintI.setColor(m_paint, 0xFF0000FF);
-        gCanvasI.drawPath(canvas, path, m_paint);
-
-        ANPRectF bounds;
-        memset(&bounds, 0, sizeof(bounds));
-        gPathI.getBounds(path, &bounds);
-#if 0
-        gLogI.log(instance, kDebug_ANPLogType, "drawpath: center %g %g bounds [%g %g %g %g]\n",
-                  cx, cy,
-                  bounds.left, bounds.top, bounds.right, bounds.bottom);
-#endif
-        gPathI.deletePath(path);
-    }
-    
-    gPaintI.setColor(m_paint, 0xFFFF0000);
-    gCanvasI.drawOval(canvas, &m_oval, m_paint);
-    
-    bounce(&m_x, &m_dx, obj->window->width - OW);
-    bounce(&m_y, &m_dy, obj->window->height - OH);
-    
-    if (obj->mUnichar) {
-        ANPFontMetrics fm;
-        gPaintI.getFontMetrics(m_paint, &fm);
-        
-        gPaintI.setColor(m_paint, 0xFF0000FF);
-        char c = static_cast<char>(obj->mUnichar);
-        gCanvasI.drawText(canvas, &c, 1, 10, -fm.fTop, m_paint);
-    }
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-void drawPlugin(NPP instance, const ANPBitmap& bitmap, const ANPRectI& clip) {
-    ANPCanvas* canvas = gCanvasI.newCanvas(&bitmap);
-    
-    ANPRectF clipR;
-    clipR.left = clip.left;
-    clipR.top = clip.top;
-    clipR.right = clip.right;
-    clipR.bottom = clip.bottom;
-    gCanvasI.clipRect(canvas, &clipR);
-    
-    drawPlugin(instance, canvas);
-    
-    gCanvasI.deleteCanvas(canvas);
-}
-
-void drawPlugin(NPP instance, ANPCanvas* canvas) {
-    PluginObject *obj = (PluginObject*) instance->pdata;    
-    if (obj->anim == NULL) {
-        obj->anim = new BallAnimation(instance);
-    }
-    obj->anim->draw(canvas);
-}
-
diff --git a/WebKit/android/plugins/sample/pluginGraphics.h b/WebKit/android/plugins/sample/pluginGraphics.h
deleted file mode 100644
index 4dceb26..0000000
--- a/WebKit/android/plugins/sample/pluginGraphics.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2008, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- 
-#include "main.h" // for NPAPI definitions
-#include "PluginObject.h"
-
-#ifndef pluginGraphics__DEFINED
-#define pluginGraphics__DEFINED
-
-struct ANPBitmap;
-struct ANPCanvas;
-struct ANPRectI;
-
-void drawPlugin(NPP instance, const ANPBitmap& bitmap, const ANPRectI& clip);
-void drawPlugin(NPP instance, ANPCanvas*);
-uint32_t getMSecs();
-
-#endif // pluginGraphics__DEFINED