diff options
Diffstat (limited to 'WebKit')
-rw-r--r-- | WebKit/android/plugins/ANPOpenGLInterface.cpp | 3 | ||||
-rw-r--r-- | WebKit/android/plugins/PluginWidgetAndroid.cpp | 16 | ||||
-rw-r--r-- | WebKit/android/plugins/PluginWidgetAndroid.h | 2 |
3 files changed, 19 insertions, 2 deletions
diff --git a/WebKit/android/plugins/ANPOpenGLInterface.cpp b/WebKit/android/plugins/ANPOpenGLInterface.cpp index 8f5f9b4..015a04c 100644 --- a/WebKit/android/plugins/ANPOpenGLInterface.cpp +++ b/WebKit/android/plugins/ANPOpenGLInterface.cpp @@ -87,6 +87,9 @@ static void anp_releaseTexture(NPP instance, const ANPTextureInfo* textureInfo) info->m_internalFormat = textureInfo->internalFormat; texture->producerReleaseAndSwap(); + + // invalidate the java view so that this content is drawn + pluginWidget->viewInvalidate(); } static void anp_invertPluginContent(NPP instance, bool isContentInverted) { diff --git a/WebKit/android/plugins/PluginWidgetAndroid.cpp b/WebKit/android/plugins/PluginWidgetAndroid.cpp index 90dceba..a02047b 100644 --- a/WebKit/android/plugins/PluginWidgetAndroid.cpp +++ b/WebKit/android/plugins/PluginWidgetAndroid.cpp @@ -156,8 +156,14 @@ void PluginWidgetAndroid::setWindow(NPWindow* window, bool isTransparent) { bool PluginWidgetAndroid::setDrawingModel(ANPDrawingModel model) { - if (model == kOpenGL_ANPDrawingModel && m_layer == 0) - m_layer = new WebCore::MediaLayer(); + 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); + } else if (model != kOpenGL_ANPDrawingModel && m_layer != 0) m_layer->unref(); @@ -204,6 +210,12 @@ void PluginWidgetAndroid::inval(const WebCore::IntRect& rect, } } +void PluginWidgetAndroid::viewInvalidate() { + WebCore::IntRect rect(m_pluginBounds.fLeft, m_pluginBounds.fTop, + m_pluginBounds.width(), m_pluginBounds.height()); + m_core->viewInvalidate(rect); +} + void PluginWidgetAndroid::draw(SkCanvas* canvas) { if (NULL == m_flipPixelRef || !m_flipPixelRef->isDirty()) { return; diff --git a/WebKit/android/plugins/PluginWidgetAndroid.h b/WebKit/android/plugins/PluginWidgetAndroid.h index 9726a22..5d586b1 100644 --- a/WebKit/android/plugins/PluginWidgetAndroid.h +++ b/WebKit/android/plugins/PluginWidgetAndroid.h @@ -177,6 +177,8 @@ struct PluginWidgetAndroid { void setPowerState(ANPPowerState powerState); + void viewInvalidate(); + private: void computeVisiblePluginRect(); void scrollToVisiblePluginRect(); |