summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.mk6
-rw-r--r--WebCore/page/Settings.cpp7
-rw-r--r--WebCore/page/Settings.h8
-rw-r--r--WebCore/platform/graphics/android/ImageAndroid.cpp1
-rw-r--r--WebCore/plugins/PluginDatabase.cpp10
-rw-r--r--WebCore/plugins/PluginDatabase.h7
-rw-r--r--WebCore/plugins/android/PluginClient.h (renamed from WebKit/android/plugins/sample/main.h)26
-rw-r--r--WebKit/android/jni/JavaBridge.cpp53
-rw-r--r--WebKit/android/jni/JavaSharedClient.cpp11
-rw-r--r--WebKit/android/jni/JavaSharedClient.h6
-rw-r--r--WebKit/android/jni/WebCoreJni.cpp2
-rw-r--r--WebKit/android/jni/WebSettings.cpp58
-rw-r--r--WebKit/android/jni/WebViewCore.cpp135
-rw-r--r--WebKit/android/jni/WebViewCore.h7
-rw-r--r--WebKit/android/nav/CachedRoot.cpp4
-rw-r--r--WebKit/android/nav/WebView.cpp37
-rw-r--r--WebKit/android/plugins/sample/Android.mk50
-rw-r--r--WebKit/android/plugins/sample/PluginObject.cpp178
-rw-r--r--WebKit/android/plugins/sample/PluginObject.h70
-rw-r--r--WebKit/android/plugins/sample/main.cpp435
-rw-r--r--WebKit/android/plugins/sample/pluginGraphics.cpp210
-rw-r--r--WebKit/android/plugins/sample/pluginGraphics.h40
22 files changed, 162 insertions, 1199 deletions
diff --git a/Android.mk b/Android.mk
index f9481b4..da29fd6 100644
--- a/Android.mk
+++ b/Android.mk
@@ -165,6 +165,7 @@ LOCAL_C_INCLUDES := \
$(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,16 +260,11 @@ LOCAL_SRC_FILES := \
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
# Build the performance command line tool but only if v8 is disabled.
-#ifneq ($(ENABLE_V8),true)
include $(BASE_PATH)/perf/Android.mk
-#endif
# Build the webkit merge tool.
include $(BASE_PATH)/WebKitTools/android/webkitmerge/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 @@ void Settings::setPluginsEnabled(bool arePluginsEnabled)
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 @@ namespace WebCore {
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 @@ namespace WebCore {
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/platform/graphics/android/ImageAndroid.cpp b/WebCore/platform/graphics/android/ImageAndroid.cpp
index fc8040c..5d81b56 100644
--- a/WebCore/platform/graphics/android/ImageAndroid.cpp
+++ b/WebCore/platform/graphics/android/ImageAndroid.cpp
@@ -79,6 +79,7 @@ BitmapImage::BitmapImage(SkBitmapRef* ref, ImageObserver* observer)
, m_frames(0)
, m_frameTimer(0)
, m_repetitionCount(0)
+ , m_repetitionCountStatus(Unknown)
, m_repetitionsComplete(0)
, m_isSolidColor(false)
, m_animationFinished(true)
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 @@ Vector<String> PluginDatabase::defaultPluginDirectories()
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 @@ namespace WebCore {
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
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 @@ static jfieldID gJavaBridge_ObjectID;
// ----------------------------------------------------------------------------
-class JavaBridge : public TimerClient, public CookieClient
+class JavaBridge : public TimerClient, public CookieClient, public PluginClient
{
public:
JavaBridge(JNIEnv* env, jobject obj);
@@ -71,6 +74,8 @@ public:
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 @@ public:
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 @@ private:
jmethodID mSetCookies;
jmethodID mCookies;
jmethodID mCookiesEnabled;
+ jmethodID mGetPluginDirectories;
jmethodID mSignalFuncPtrQueue;
};
@@ -110,6 +117,7 @@ JavaBridge::JavaBridge(JNIEnv* env, jobject obj)
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 @@ JavaBridge::JavaBridge(JNIEnv* env, jobject obj)
JavaSharedClient::SetTimerClient(this);
JavaSharedClient::SetCookieClient(this);
-}
-
+ JavaSharedClient::SetPluginClient(this);
+}
+
JavaBridge::~JavaBridge()
{
if (mJavaObject) {
@@ -192,6 +201,25 @@ JavaBridge::cookiesEnabled()
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 @@ void JavaBridge::ServiceFuncPtrQueue(JNIEnv*)
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 @@ static JNINativeMethod gWebCoreJavaBridgeMethods[] = {
(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 @@ namespace android {
return gCookieClient;
}
+ PluginClient* JavaSharedClient::GetPluginClient()
+ {
+ return gPluginClient;
+ }
+
void JavaSharedClient::SetTimerClient(TimerClient* client)
{
gTimerClient = client;
@@ -50,8 +55,14 @@ namespace android {
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 @@ namespace android {
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/WebCoreJni.cpp b/WebKit/android/jni/WebCoreJni.cpp
index 139058e..b757e3a 100644
--- a/WebKit/android/jni/WebCoreJni.cpp
+++ b/WebKit/android/jni/WebCoreJni.cpp
@@ -87,7 +87,7 @@ WebCore::String to_string(JNIEnv* env, jstring str)
int register_webcorejni(JNIEnv* env) {
// Instantiate the WeakReference fields.
jclass weakRef = env->FindClass("java/lang/ref/WeakReference");
- LOG_ASSERT(android::weakRef, "Could not find WeakReference");
+ LOG_ASSERT(weakRef, "Could not find WeakReference");
android::gWeakRefClass = (jclass)env->NewGlobalRef(weakRef);
android::gWeakRefInit = env->GetMethodID(android::gWeakRefClass,
"<init>", "(Ljava/lang/Object;)V");
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 @@ struct FieldIds {
#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 @@ struct FieldIds {
#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 @@ struct FieldIds {
#endif
jfieldID mJavaScriptEnabled;
jfieldID mPluginsEnabled;
-#ifdef ANDROID_PLUGINS
- jfieldID mPluginsPath;
-#endif
#if ENABLE(OFFLINE_WEB_APPLICATIONS)
jfieldID mAppCacheEnabled;
jfieldID mAppCachePath;
@@ -299,46 +281,6 @@ public:
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 2ae1808..18eb6b9 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"
@@ -1038,6 +1037,21 @@ bool WebViewCore::prepareFrameCache()
recordPicture(m_tempPict);
m_temp->setPicture(m_tempPict);
m_temp->setTextGeneration(m_textGeneration);
+ if (m_temp->currentFocus())
+ return true;
+ WebCoreViewBridge* window = m_mainFrame->view()->platformWidget();
+ m_temp->setVisibleRect(WebCore::IntRect(m_scrollOffsetX,
+ m_scrollOffsetY, window->width(), window->height()));
+ int x, y;
+ const CachedFrame* frame;
+ const IntRect& bounds = m_history.navBounds();
+ const CachedNode* node = m_temp->findAt(bounds, &frame, &x, &y);
+ DBG_NAV_LOGD("node=%p frame=%p x=%d y=%d bounds=(%d,%d,w=%d,h=%d)",
+ node, frame, x, y, bounds.x(), bounds.y(), bounds.width(),
+ bounds.height());
+ if (node)
+ m_temp->setCachedFocus(const_cast<CachedFrame*>(frame),
+ const_cast<CachedNode*>(node));
return true;
}
@@ -1186,7 +1200,7 @@ void WebViewCore::setFinalFocus(WebCore::Frame* frame, WebCore::Node* node,
int x, int y, bool block)
{
DBG_NAV_LOGD("frame=%p node=%p x=%d y=%d", frame, node, x, y);
- bool result = finalKitFocus(frame, node, x, y, false);
+ bool result = finalKitFocus(frame, node, x, y);
bool callNotify = false;
gNotifyFocusMutex.lock();
if (m_blockNotifyFocus) {
@@ -1199,7 +1213,7 @@ void WebViewCore::setFinalFocus(WebCore::Frame* frame, WebCore::Node* node,
if (block) {
m_blockFocusChange = true;
if (!result && node)
- touchUp(m_touchGeneration, 0, 0, 0, x, y, 0, true, true);
+ touchUp(m_touchGeneration, 0, 0, 0, x, y, 0, true);
}
}
@@ -1219,25 +1233,13 @@ void WebViewCore::setKitFocus(int moveGeneration, int buildGeneration,
m_moveGeneration, moveGeneration);
return; // short-circuit if a newer move has already been generated
}
- if (!commonKitFocus(moveGeneration, buildGeneration, frame, node, x, y,
- ignoreNullFocus))
- return;
- m_lastGeneration = moveGeneration;
-}
-
-bool WebViewCore::commonKitFocus(int generation, int buildGeneration,
- WebCore::Frame* frame, WebCore::Node* node, int x, int y,
- bool ignoreNullFocus)
-{
- DBG_NAV_LOGD("generation=%d buildGeneration=%d frame=%p"
- " node=%p x=%d y=%d", generation, buildGeneration, frame, node, x, y);
m_useReplay = true;
bool newCache = prepareFrameCache(); // must wait for possible recompute before using
- if (m_moveGeneration > generation) {
- DBG_NAV_LOGD("m_moveGeneration=%d > generation=%d",
- m_moveGeneration, generation);
+ if (m_moveGeneration > moveGeneration) {
+ DBG_NAV_LOGD("m_moveGeneration=%d > moveGeneration=%d",
+ m_moveGeneration, moveGeneration);
releaseFrameCache(newCache);
- return false; // short-circuit if a newer move has already been generated
+ return; // short-circuit if a newer move has already been generated
}
// if the nav cache has been rebuilt since this focus request was generated,
// send a request back to the UI side to recompute the kit-side focus
@@ -1247,30 +1249,25 @@ bool WebViewCore::commonKitFocus(int generation, int buildGeneration,
m_buildGeneration, buildGeneration);
gRecomputeFocusMutex.lock();
bool first = !m_recomputeEvents.size();
- m_recomputeEvents.append(generation);
+ m_recomputeEvents.append(moveGeneration);
gRecomputeFocusMutex.unlock();
releaseFrameCache(newCache);
if (first)
sendRecomputeFocus();
- return false;
+ return;
}
releaseFrameCache(newCache);
+ m_lastGeneration = moveGeneration;
if (!node && ignoreNullFocus)
- return true;
- finalKitFocus(frame, node, x, y, false);
- return true;
+ return;
+ finalKitFocus(frame, node, x, y);
}
// Update mouse position and may change focused node.
-// If donotChangeDOMFocus is true, the function does not changed focused node
-// in the DOM tree. Changing the focus in DOM may trigger onblur event
-// handler on the current focused node before firing mouse up and down events.
bool WebViewCore::finalKitFocus(WebCore::Frame* frame, WebCore::Node* node,
- int x, int y, bool donotChangeDOMFocus)
+ int x, int y)
{
- DBG_NAV_LOGD("setFocusedNode frame=%p node=%p x=%d y=%d "
- "donotChangeDOMFocus=%s", frame, node, x, y,
- donotChangeDOMFocus ? "true" : "false");
+ DBG_NAV_LOGD("frame=%p node=%p x=%d y=%d ", frame, node, x, y);
CacheBuilder& builder = FrameLoaderClientAndroid::
get(m_mainFrame)->getCacheBuilder();
if (!frame || CacheBuilder::validNode(m_mainFrame, frame, NULL) == false)
@@ -1285,45 +1282,10 @@ bool WebViewCore::finalKitFocus(WebCore::Frame* frame, WebCore::Node* node,
false, WTF::currentTime());
frame->eventHandler()->handleMouseMoveEvent(mouseEvent);
bool valid = CacheBuilder::validNode(m_mainFrame, frame, node);
- if (!donotChangeDOMFocus) {
- WebCore::Document* oldDoc = oldFocusNode ? oldFocusNode->document() : 0;
- if (!node) {
- if (oldFocusNode)
- oldDoc->setFocusedNode(0);
- return false;
- } else if (!valid) {
- DBG_NAV_LOGD("sendMarkNodeInvalid node=%p", node);
- sendMarkNodeInvalid(node);
- if (oldFocusNode)
- oldDoc->setFocusedNode(0);
- return false;
- }
- // If we jump frames (docs), kill the focus on the old doc
- if (oldFocusNode && node->document() != oldDoc) {
- oldDoc->setFocusedNode(0);
- }
- if (!node->isTextNode())
- static_cast<WebCore::Element*>(node)->focus(false);
- if (node->document()->focusedNode() != node) {
- // This happens when Element::focus() fails as we may try to set the
- // focus to a node which WebCore doesn't recognize as a focusable node.
- // So we need to do some extra work, as it does in Element::focus(),
- // besides calling Document::setFocusedNode.
- if (oldFocusNode) {
- // copied from clearSelectionIfNeeded in FocusController.cpp
- WebCore::SelectionController* s = oldDoc->frame()->selection();
- if (!s->isNone())
- s->clear();
- }
- //setFocus on things that WebCore doesn't recognize as supporting focus
- //for instance, if there is an onclick element that does not support focus
- node->document()->setFocusedNode(node);
- }
- } else { // !donotChangeDOMFocus
- if (!node || !valid)
- return false;
+ if (!node || !valid) {
+ DBG_NAV_LOGD("exit: node=%p valid=%s", node, valid ? "true" : "false");
+ return false;
}
-
DBG_NAV_LOGD("setFocusedNode node=%p", node);
builder.setLastFocus(node);
m_lastFocused = node;
@@ -1363,7 +1325,7 @@ WebCore::Frame* WebViewCore::changedKitFocus(WebCore::Frame* frame,
WebCore::Node* current = FrameLoaderClientAndroid::get(m_mainFrame)->getCacheBuilder().currentFocus();
if (current == node)
return frame;
- return finalKitFocus(frame, node, x, y, true) ? frame : m_mainFrame;
+ return finalKitFocus(frame, node, x, y) ? frame : m_mainFrame;
}
static int findTextBoxIndex(WebCore::Node* node, const WebCore::IntPoint& pt)
@@ -1859,24 +1821,15 @@ bool WebViewCore::handleTouchEvent(int action, int x, int y)
void WebViewCore::touchUp(int touchGeneration, int buildGeneration,
WebCore::Frame* frame, WebCore::Node* node, int x, int y, int size,
- bool isClick, bool retry)
+ bool retry)
{
if (m_touchGeneration > touchGeneration) {
DBG_NAV_LOGD("m_touchGeneration=%d > touchGeneration=%d"
" x=%d y=%d", m_touchGeneration, touchGeneration, x, y);
return; // short circuit if a newer touch has been generated
}
- if (retry || isClick)
- finalKitFocus(frame, node, x, y, true); // don't change DOM focus
- else if (!commonKitFocus(touchGeneration, buildGeneration,
- frame, node, x, y, false)) {
- return;
- }
+ finalKitFocus(frame, node, x, y);
m_lastGeneration = touchGeneration;
- // If this is just a touch and not a click, we have already done the change in focus,
- // so just leave the function now.
- if (!isClick)
- return;
if (frame && CacheBuilder::validNode(m_mainFrame, frame, 0)) {
frame->loader()->resetMultipleFormSubmissionProtection();
}
@@ -2370,7 +2323,7 @@ static jboolean HandleTouchEvent(JNIEnv *env, jobject obj, jint action, jint x,
static void TouchUp(JNIEnv *env, jobject obj, jint touchGeneration,
jint buildGeneration, jint frame, jint node, jint x, jint y, jint size,
- jboolean isClick, jboolean retry)
+ jboolean retry)
{
#ifdef ANDROID_INSTRUMENT
TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
@@ -2378,7 +2331,7 @@ static void TouchUp(JNIEnv *env, jobject obj, jint touchGeneration,
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
LOG_ASSERT(viewImpl, "viewImpl not set in %s", __FUNCTION__);
viewImpl->touchUp(touchGeneration, buildGeneration,
- (WebCore::Frame*) frame, (WebCore::Node*) node, x, y, size, isClick, retry);
+ (WebCore::Frame*) frame, (WebCore::Node*) node, x, y, size, retry);
}
static jstring RetrieveHref(JNIEnv *env, jobject obj, jint frame,
@@ -2570,18 +2523,6 @@ static void SetDatabaseQuota(JNIEnv* env, jobject obj, jlong quota) {
#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);
@@ -2667,7 +2608,7 @@ static JNINativeMethod gJavaWebViewCoreMethods[] = {
(void*) FindAddress },
{ "nativeHandleTouchEvent", "(III)Z",
(void*) HandleTouchEvent },
- { "nativeTouchUp", "(IIIIIIIZZ)V",
+ { "nativeTouchUp", "(IIIIIIIZ)V",
(void*) TouchUp },
{ "nativeRetrieveHref", "(II)Ljava/lang/String;",
(void*) RetrieveHref },
@@ -2695,8 +2636,6 @@ static JNINativeMethod gJavaWebViewCoreMethods[] = {
(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/jni/WebViewCore.h b/WebKit/android/jni/WebViewCore.h
index 3ad8077..b062ced 100644
--- a/WebKit/android/jni/WebViewCore.h
+++ b/WebKit/android/jni/WebViewCore.h
@@ -234,7 +234,7 @@ namespace android {
*/
void touchUp(int touchGeneration, int buildGeneration,
WebCore::Frame* frame, WebCore::Node* node, int x, int y,
- int size, bool isClick, bool retry);
+ int size, bool retry);
/**
* Sets the index of the label from a popup
@@ -414,10 +414,7 @@ namespace android {
WebCore::Frame* changedKitFocus(WebCore::Frame* frame,
WebCore::Node* node, int x, int y);
- bool commonKitFocus(int generation, int buildGeneration,
- WebCore::Frame* frame, WebCore::Node* node, int x, int y,
- bool ignoreNullFocus);
- bool finalKitFocus(WebCore::Frame* frame, WebCore::Node* node, int x, int y, bool donotChangeDOMFocus);
+ bool finalKitFocus(WebCore::Frame* , WebCore::Node* , int x, int y);
void doMaxScroll(CacheBuilder::Direction dir);
SkPicture* rebuildPicture(const SkIRect& inval);
void rebuildPictureSet(PictureSet* );
diff --git a/WebKit/android/nav/CachedRoot.cpp b/WebKit/android/nav/CachedRoot.cpp
index 3b8871a..cf8578f 100644
--- a/WebKit/android/nav/CachedRoot.cpp
+++ b/WebKit/android/nav/CachedRoot.cpp
@@ -539,7 +539,7 @@ public:
for (r = rings.begin(); r != rings.end(); r++) {
SkIRect fatter = {r->x(), r->y(), r->right(), r->bottom()};
fatter.inset(-FOCUS_RING_HIT_TEST_RADIUS, -FOCUS_RING_HIT_TEST_RADIUS);
- DBG_NAV_LOGD("%s fat=(%d,%d,r=%d,b=%d)", fatter.fLeft, fatter.fTop,
+ DBG_NAV_LOGD("fat=(%d,%d,r=%d,b=%d)", fatter.fLeft, fatter.fTop,
fatter.fRight, fatter.fBottom);
mRings.op(fatter, SkRegion::kUnion_Op);
}
@@ -626,6 +626,8 @@ void CachedRoot::checkForJiggle(int* xDeltaPtr) const
bool CachedRoot::checkRings(const WTF::Vector<WebCore::IntRect>& rings,
const WebCore::IntRect& bounds) const
{
+ if (!mPicture)
+ return false;
RingCheck ringCheck(rings, bounds.location());
BoundsCanvas checker(&ringCheck);
SkBitmap bitmap;
diff --git a/WebKit/android/nav/WebView.cpp b/WebKit/android/nav/WebView.cpp
index c259501..8b7b6b9 100644
--- a/WebKit/android/nav/WebView.cpp
+++ b/WebKit/android/nav/WebView.cpp
@@ -113,7 +113,6 @@ struct MotionUpParams {
int m_x;
int m_y;
int m_slop;
- bool m_isClick;
};
struct FirstMoveFocusParams {
@@ -395,7 +394,7 @@ WebView(JNIEnv* env, jobject javaWebView, int viewImpl)
m_javaGlue.m_overrideLoading = GetJMethod(env, clazz, "overrideLoading", "(Ljava/lang/String;)V");
m_javaGlue.m_sendFinalFocus = GetJMethod(env, clazz, "sendFinalFocus", "(IIII)V");
m_javaGlue.m_sendKitFocus = GetJMethod(env, clazz, "sendKitFocus", "()V");
- m_javaGlue.m_sendMotionUp = GetJMethod(env, clazz, "sendMotionUp", "(IIIIIIIZZ)V");
+ m_javaGlue.m_sendMotionUp = GetJMethod(env, clazz, "sendMotionUp", "(IIIIIIIZ)V");
m_javaGlue.m_setFocusData = GetJMethod(env, clazz, "setFocusData", "(IIIIIIZ)V");
m_javaGlue.m_getScaledMaxXScroll = GetJMethod(env, clazz, "getScaledMaxXScroll", "()I");
m_javaGlue.m_getScaledMaxYScroll = GetJMethod(env, clazz, "getScaledMaxYScroll", "()I");
@@ -807,10 +806,6 @@ OutOfFocusFix fixOutOfDateFocus(bool useReplay)
DBG_NAV_LOG("!m_replay.count()");
return DoNothing;
}
- if (webFocusNode->index() == cachedFocusNode->index()) {
- DBG_NAV_LOG("index ==");
- return DoNothing;
- }
const WebCore::IntRect& webBounds = webRoot->focusBounds();
DBG_NAV_LOGD("webBounds=(%d,%d,w=%d,h=%d)",
webBounds.x(), webBounds.y(),
@@ -1240,7 +1235,7 @@ void recomputeFocus()
// if (invalidFrame(cParams.m_frame, root) == false)
// root->setFocus(cParams.m_frame, cParams.m_node,
// cParams.m_x, cParams.m_y);
- motionUp(mParams.m_x, mParams.m_y, mParams.m_slop, mParams.m_isClick, inval, true);
+ motionUp(mParams.m_x, mParams.m_y, mParams.m_slop, inval, true);
DBG_NAV_LOGD("motionUp m_x=%d m_y=%d", mParams.m_x, mParams.m_y);
} break;
case CommonParams::FirstMoveFocusParams: {
@@ -1374,7 +1369,7 @@ void markNodeInvalid(WebCore::Node* node)
viewInvalidate();
}
-bool motionUp(int x, int y, int slop, bool isClick, bool inval, bool retry)
+bool motionUp(int x, int y, int slop, bool inval, bool retry)
{
bool pageScrolled = false;
m_followedLink = false;
@@ -1382,6 +1377,8 @@ bool motionUp(int x, int y, int slop, bool isClick, bool inval, bool retry)
WebCore::IntRect rect = WebCore::IntRect(x - slop, y - slop, slop * 2, slop * 2);
int rx, ry;
CachedRoot* root = getFrameCache(AllowNewer);
+ if (!root)
+ return false;
const CachedNode* result = findAt(root, rect, &frame, &rx, &ry);
if (!result) {
DBG_NAV_LOGD("no nodes found root=%p", root);
@@ -1400,7 +1397,7 @@ bool motionUp(int x, int y, int slop, bool isClick, bool inval, bool retry)
}
sendMotionUp(rootGeneration, frame ?
(WebCore::Frame*) frame->framePointer() : 0,
- 0, x, y, slop, isClick, retry);
+ 0, x, y, slop, retry);
if (inval)
viewInvalidate();
if (!retry) {
@@ -1410,7 +1407,6 @@ bool motionUp(int x, int y, int slop, bool isClick, bool inval, bool retry)
params.m_x = x;
params.m_y = y;
params.m_slop = slop;
- params.m_isClick = isClick;
m_replay.add(params.d, sizeof(params));
}
clearTextEntry();
@@ -1430,7 +1426,7 @@ bool motionUp(int x, int y, int slop, bool isClick, bool inval, bool retry)
sendMotionUp(root->generation(),
frame ? (WebCore::Frame*) frame->framePointer() : 0,
result ? (WebCore::Node*) result->nodePointer() : 0, rx, ry,
- slop, isClick, retry);
+ slop, retry);
if (inval)
viewInvalidate();
if (!retry) {
@@ -1440,7 +1436,6 @@ bool motionUp(int x, int y, int slop, bool isClick, bool inval, bool retry)
params.m_x = x;
params.m_y = y;
params.m_slop = slop;
- params.m_isClick = isClick;
// params.c.setFocus(oldFocusNode, oldFrame, root, focusLocation);
m_replay.add(params.d, sizeof(params));
}
@@ -1450,11 +1445,9 @@ bool motionUp(int x, int y, int slop, bool isClick, bool inval, bool retry)
updateTextEntry();
displaySoftKeyboard();
} else {
- if (isClick) {
- setFollowedLink(true);
- if (type != NORMAL_CACHEDNODETYPE) {
- overrideUrlLoading(result->getExport());
- }
+ setFollowedLink(true);
+ if (type != NORMAL_CACHEDNODETYPE) {
+ overrideUrlLoading(result->getExport());
}
if (oldNodeIsTextArea)
clearTextEntry();
@@ -1644,7 +1637,7 @@ void sendKitFocus()
void sendMotionUp(int buildGeneration,
WebCore::Frame* framePtr, WebCore::Node* nodePtr, int x, int y, int slop,
- bool isClick, bool retry)
+ bool retry)
{
m_viewImpl->m_touchGeneration = m_viewImpl->m_generation = ++m_generation;
DBG_NAV_LOGD("buildGeneration=%d m_generation=%d framePtr=%p nodePtr=%p"
@@ -1653,7 +1646,7 @@ void sendMotionUp(int buildGeneration,
LOG_ASSERT(m_javaGlue.m_obj, "A WebView was not associated with this WebViewNative!");
JNIEnv* env = JSC::Bindings::getJNIEnv();
env->CallVoidMethod(m_javaGlue.object(env).get(), m_javaGlue.m_sendMotionUp, m_generation,
- buildGeneration, (jint) framePtr, (jint) nodePtr, x, y, slop, isClick, retry);
+ buildGeneration, (jint) framePtr, (jint) nodePtr, x, y, slop, retry);
checkException(env);
}
@@ -1997,11 +1990,11 @@ static void nativeMarkNodeInvalid(JNIEnv *env, jobject obj, int node)
}
static bool nativeMotionUp(JNIEnv *env, jobject obj,
- int x, int y, int slop, bool isClick)
+ int x, int y, int slop)
{
WebView* view = GET_NATIVE_VIEW(env, obj);
LOG_ASSERT(view, "view not set in %s", __FUNCTION__);
- return view->motionUp(x, y, slop, isClick, true, false);
+ return view->motionUp(x, y, slop, true, false);
}
static bool nativeUpdateFocusNode(JNIEnv *env, jobject obj)
@@ -2285,7 +2278,7 @@ static JNINativeMethod gJavaWebViewMethods[] = {
(void*) nativeInstrumentReport },
{ "nativeMarkNodeInvalid", "(I)V",
(void*) nativeMarkNodeInvalid },
- { "nativeMotionUp", "(IIIZ)Z",
+ { "nativeMotionUp", "(III)Z",
(void*) nativeMotionUp },
{ "nativeMoveFocus", "(IIZ)Z",
(void*) nativeMoveFocus },
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