summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDerek Sollenberger <djsollen@google.com>2011-08-29 13:51:19 -0400
committerDerek Sollenberger <djsollen@google.com>2011-08-29 13:51:19 -0400
commitb259cb234d9c7a05f3eb9fb20a035dfc7bca0544 (patch)
tree363d44e214754c6b98e613676057ee4f177b3ebe
parenta53530faedfcc88c00b455e71bb3e2b738529e6a (diff)
downloadexternal_webkit-b259cb234d9c7a05f3eb9fb20a035dfc7bca0544.zip
external_webkit-b259cb234d9c7a05f3eb9fb20a035dfc7bca0544.tar.gz
external_webkit-b259cb234d9c7a05f3eb9fb20a035dfc7bca0544.tar.bz2
Fix plugin crashes due to bad ref counting.
bug: 5197948 Change-Id: Iece573a141feda56af2123b5fc9ace4cefa5139d
-rw-r--r--Source/WebCore/platform/graphics/android/MediaLayer.cpp6
-rw-r--r--Source/WebCore/platform/graphics/android/MediaLayer.h2
-rw-r--r--Source/WebCore/platform/graphics/android/MediaTexture.cpp10
-rw-r--r--Source/WebCore/platform/graphics/android/MediaTexture.h2
-rw-r--r--Source/WebKit/android/plugins/PluginWidgetAndroid.cpp12
5 files changed, 16 insertions, 16 deletions
diff --git a/Source/WebCore/platform/graphics/android/MediaLayer.cpp b/Source/WebCore/platform/graphics/android/MediaLayer.cpp
index ae65173..5625bbe 100644
--- a/Source/WebCore/platform/graphics/android/MediaLayer.cpp
+++ b/Source/WebCore/platform/graphics/android/MediaLayer.cpp
@@ -40,11 +40,11 @@
namespace WebCore {
-MediaLayer::MediaLayer(jobject weakWebViewRef) : LayerAndroid((RenderLayer*) NULL)
+MediaLayer::MediaLayer(jobject webViewRef) : LayerAndroid((RenderLayer*) NULL)
{
- m_contentTexture = new MediaTexture(weakWebViewRef);
+ m_contentTexture = new MediaTexture(webViewRef);
m_contentTexture->incStrong(this);
- m_videoTexture = new MediaTexture(weakWebViewRef);
+ m_videoTexture = new MediaTexture(webViewRef);
m_videoTexture->incStrong(this);
m_isCopy = false;
diff --git a/Source/WebCore/platform/graphics/android/MediaLayer.h b/Source/WebCore/platform/graphics/android/MediaLayer.h
index dd58674..6d08ed6 100644
--- a/Source/WebCore/platform/graphics/android/MediaLayer.h
+++ b/Source/WebCore/platform/graphics/android/MediaLayer.h
@@ -32,7 +32,7 @@ namespace WebCore {
class MediaLayer : public LayerAndroid {
public:
- MediaLayer(jobject weakWebViewRef);
+ MediaLayer(jobject webViewRef);
MediaLayer(const MediaLayer& layer);
virtual ~MediaLayer();
diff --git a/Source/WebCore/platform/graphics/android/MediaTexture.cpp b/Source/WebCore/platform/graphics/android/MediaTexture.cpp
index 96d136a..eb143a4 100644
--- a/Source/WebCore/platform/graphics/android/MediaTexture.cpp
+++ b/Source/WebCore/platform/graphics/android/MediaTexture.cpp
@@ -48,9 +48,15 @@
namespace WebCore {
-MediaTexture::MediaTexture(jobject weakWebViewRef) : android::LightRefBase<MediaTexture>()
+MediaTexture::MediaTexture(jobject webViewRef) : android::LightRefBase<MediaTexture>()
{
- m_weakWebViewRef = weakWebViewRef;
+ if (webViewRef) {
+ JNIEnv* env = JSC::Bindings::getJNIEnv();
+ m_weakWebViewRef = env->NewWeakGlobalRef(webViewRef);
+ } else {
+ m_weakWebViewRef = 0;
+ }
+
m_textureId = 0;
m_dimensions.setEmpty();
m_newWindowRequest = false;
diff --git a/Source/WebCore/platform/graphics/android/MediaTexture.h b/Source/WebCore/platform/graphics/android/MediaTexture.h
index d7ae9cb..c617264 100644
--- a/Source/WebCore/platform/graphics/android/MediaTexture.h
+++ b/Source/WebCore/platform/graphics/android/MediaTexture.h
@@ -36,7 +36,7 @@ class MediaListener;
class MediaTexture : public android::LightRefBase<MediaTexture> {
public:
- MediaTexture(jobject weakWebViewRef);
+ MediaTexture(jobject webViewRef);
~MediaTexture();
void initNativeWindowIfNeeded();
diff --git a/Source/WebKit/android/plugins/PluginWidgetAndroid.cpp b/Source/WebKit/android/plugins/PluginWidgetAndroid.cpp
index 19433ab..c4c31e5 100644
--- a/Source/WebKit/android/plugins/PluginWidgetAndroid.cpp
+++ b/Source/WebKit/android/plugins/PluginWidgetAndroid.cpp
@@ -45,7 +45,7 @@
#include "android_graphics.h"
#include <JNIUtility.h>
-#define PLUGIN_DEBUG_LOCAL // controls the printing of log messages
+//#define PLUGIN_DEBUG_LOCAL // controls the printing of log messages
#define DEBUG_EVENTS 0 // logs event contents, return value, and processing time
#define DEBUG_VISIBLE_RECTS 0 // temporary debug printfs and fixes
@@ -97,9 +97,7 @@ PluginWidgetAndroid::~PluginWidgetAndroid() {
}
SkSafeUnref(m_flipPixelRef);
-
- if (m_layer)
- m_layer->unref();
+ SkSafeUnref(m_layer);
}
void PluginWidgetAndroid::init(android::WebViewCore* core) {
@@ -158,12 +156,8 @@ void PluginWidgetAndroid::setWindow(NPWindow* window, bool isTransparent) {
bool PluginWidgetAndroid::setDrawingModel(ANPDrawingModel model) {
if (model == kOpenGL_ANPDrawingModel && m_layer == 0) {
- JNIEnv* env = JSC::Bindings::getJNIEnv();
jobject webview = m_core->getWebViewJavaObject();
- jobject weakWebViewRef = 0;
- if (webview)
- weakWebViewRef = env->NewWeakGlobalRef(webview);
- m_layer = new WebCore::MediaLayer(weakWebViewRef);
+ m_layer = new WebCore::MediaLayer(webview);
}
else if (model != kOpenGL_ANPDrawingModel && m_layer != 0) {
m_layer->unref();