diff options
Diffstat (limited to 'WebKit/android/plugins')
| -rw-r--r-- | WebKit/android/plugins/ANPWindowInterface.cpp | 5 | ||||
| -rw-r--r-- | WebKit/android/plugins/PluginWidgetAndroid.cpp | 38 | ||||
| -rw-r--r-- | WebKit/android/plugins/PluginWidgetAndroid.h | 18 |
3 files changed, 46 insertions, 15 deletions
diff --git a/WebKit/android/plugins/ANPWindowInterface.cpp b/WebKit/android/plugins/ANPWindowInterface.cpp index 6d7b8e5..c8c2c70 100644 --- a/WebKit/android/plugins/ANPWindowInterface.cpp +++ b/WebKit/android/plugins/ANPWindowInterface.cpp @@ -55,14 +55,13 @@ static void anp_showKeyboard(NPP instance, bool value) { static void anp_requestFullScreen(NPP instance) { PluginView* pluginView = pluginViewForInstance(instance); PluginWidgetAndroid* pluginWidget = pluginView->platformPluginWidget(); - jobject javaPlugin = pluginWidget->getJavaPluginInstance(); - pluginWidget->webViewCore()->showFullScreenPlugin(javaPlugin); + pluginWidget->requestFullScreen(); } static void anp_exitFullScreen(NPP instance) { PluginView* pluginView = pluginViewForInstance(instance); PluginWidgetAndroid* pluginWidget = pluginView->platformPluginWidget(); - pluginWidget->webViewCore()->hideFullScreenPlugin(); + pluginWidget->exitFullScreen(true); } /////////////////////////////////////////////////////////////////////////////// diff --git a/WebKit/android/plugins/PluginWidgetAndroid.cpp b/WebKit/android/plugins/PluginWidgetAndroid.cpp index 36d7420..f8862b2 100644 --- a/WebKit/android/plugins/PluginWidgetAndroid.cpp +++ b/WebKit/android/plugins/PluginWidgetAndroid.cpp @@ -52,27 +52,28 @@ PluginWidgetAndroid::PluginWidgetAndroid(WebCore::PluginView* view) m_visibleDocRect.setEmpty(); m_pluginBounds.setEmpty(); m_hasFocus = false; + m_isFullScreen = false; m_zoomLevel = 0; - m_childView = NULL; m_webkitPlugin = NULL; + m_embeddedView = NULL; } PluginWidgetAndroid::~PluginWidgetAndroid() { if (m_core) { m_core->removePlugin(this); - if (m_childView) { - m_core->destroySurface(m_childView); + if (m_embeddedView) { + m_core->destroySurface(m_embeddedView); } } // cleanup any remaining JNI References JNIEnv* env = JSC::Bindings::getJNIEnv(); - if (m_childView) { - env->DeleteGlobalRef(m_childView); - } if (m_webkitPlugin) { env->DeleteGlobalRef(m_webkitPlugin); } + if (m_embeddedView) { + env->DeleteGlobalRef(m_embeddedView); + } m_flipPixelRef->safeUnref(); } @@ -119,19 +120,19 @@ void PluginWidgetAndroid::setWindow(NPWindow* window, bool isTransparent) { IntPoint docPoint = frameToDocumentCoords(window->x, window->y); // if the surface exists check for changes and update accordingly - if (m_childView && m_pluginBounds != oldPluginBounds) { + if (m_embeddedView && m_pluginBounds != oldPluginBounds) { - m_core->updateSurface(m_childView, docPoint.x(), docPoint.y(), + m_core->updateSurface(m_embeddedView, docPoint.x(), docPoint.y(), window->width, window->height); // if the surface does not exist then create a new surface - } else if(!m_childView) { + } else if(!m_embeddedView) { jobject tempObj = m_core->createSurface(getJavaPluginInstance(), docPoint.x(), docPoint.y(), window->width, window->height); if (tempObj) { JNIEnv* env = JSC::Bindings::getJNIEnv(); - m_childView = env->NewGlobalRef(tempObj); + m_embeddedView = env->NewGlobalRef(tempObj); } } } else { @@ -430,3 +431,20 @@ IntPoint PluginWidgetAndroid::frameToDocumentCoords(int frameX, int frameY) cons return docPoint; } + +void PluginWidgetAndroid::requestFullScreen() { + if (m_isFullScreen || !m_webkitPlugin) { + return; + } + + m_core->showFullScreenPlugin(m_webkitPlugin, m_pluginView->instance()); + m_isFullScreen = true; +} + +void PluginWidgetAndroid::exitFullScreen(bool pluginInitiated) { + if (m_isFullScreen && pluginInitiated) { + m_core->hideFullScreenPlugin(); + } + + m_isFullScreen = false; +} diff --git a/WebKit/android/plugins/PluginWidgetAndroid.h b/WebKit/android/plugins/PluginWidgetAndroid.h index 24ef69b..ef3e40c 100644 --- a/WebKit/android/plugins/PluginWidgetAndroid.h +++ b/WebKit/android/plugins/PluginWidgetAndroid.h @@ -125,13 +125,26 @@ struct PluginWidgetAndroid { */ void setVisibleRects(const ANPRectI rects[], int32_t count); - /** Returns a java object that implements the WebkitPlugin interface. The + /** Returns a java object that implements the WebkitPlugin interface. The implementation is located in the plugin's apk and is described in the apk's manifest file. For each plugin instance in webkit there is at most one instance of the java object associated with that plugin. */ jobject getJavaPluginInstance(); + /** Called when a plugin wishes to enter into full screen mode. It invokes + the plugin's Java class (defined in the plugin's apk manifest), which is + called asynchronously and provides a View to be displayed full screen. + */ + void requestFullScreen(); + + /** Called when a plugin wishes to exit from full screen mode. As a result, + the plugin's full-screen view is discarded by the view system. It is also + called in order to notify the native code that the browser has discarded + the view. + */ + void exitFullScreen(bool pluginInitiated); + private: WebCore::IntPoint frameToDocumentCoords(int frameX, int frameY) const; void computeVisibleFrameRect(); @@ -147,9 +160,10 @@ private: SkIRect m_visibleDocRect; SkIRect m_requestedFrameRect; bool m_hasFocus; + bool m_isFullScreen; float m_zoomLevel; - jobject m_childView; jobject m_webkitPlugin; + jobject m_embeddedView; /* We limit the number of rectangles to minimize storage and ensure adequate speed. |
