16ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger/* 22c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenberger * Copyright 2011, The Android Open Source Project 36ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * 46ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * Redistribution and use in source and binary forms, with or without 56ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * modification, are permitted provided that the following conditions 66ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * are met: 76ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * * Redistributions of source code must retain the above copyright 86ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * notice, this list of conditions and the following disclaimer. 96ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * * Redistributions in binary form must reproduce the above copyright 106ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * notice, this list of conditions and the following disclaimer in the 116ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * documentation and/or other materials provided with the distribution. 126ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * 136ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY 146ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 156ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 166ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 176ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 186ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 196ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 206ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 216ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 226ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 236ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 246ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger */ 256ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger 266ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger// must include config.h first for webkit to fiddle with new/delete 276ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger#include "config.h" 286ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger 292c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenberger#include "ANPNativeWindow_npapi.h" 302c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenberger 312c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenberger#include <android/native_window.h> 326ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger#include "PluginView.h" 336ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger#include "PluginWidgetAndroid.h" 346ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger#include "MediaLayer.h" 3535b48db52f4434b8a07ac3529efbb17b994769a1Derek Sollenberger#include "WebViewCore.h" 3635b48db52f4434b8a07ac3529efbb17b994769a1Derek Sollenberger#include "Frame.h" 3735b48db52f4434b8a07ac3529efbb17b994769a1Derek Sollenberger#include "Page.h" 3835b48db52f4434b8a07ac3529efbb17b994769a1Derek Sollenberger#include "Chrome.h" 3935b48db52f4434b8a07ac3529efbb17b994769a1Derek Sollenberger#include "ChromeClient.h" 406ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger 412c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenberger 426ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenbergerusing namespace android; 436ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger 446ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenbergerstatic WebCore::PluginView* pluginViewForInstance(NPP instance) { 456ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger if (instance && instance->ndata) 466ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger return static_cast<WebCore::PluginView*>(instance->ndata); 476ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger return WebCore::PluginView::currentPluginView(); 486ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger} 496ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger 502c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenbergerstatic WebCore::MediaLayer* mediaLayerForInstance(NPP instance) { 516ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger WebCore::PluginView* pluginView = pluginViewForInstance(instance); 526ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger PluginWidgetAndroid* pluginWidget = pluginView->platformPluginWidget(); 532c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenberger return pluginWidget->getLayer(); 546ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger} 556ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger 562c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenbergerstatic ANativeWindow* anp_acquireNativeWindow(NPP instance) { 572c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenberger WebCore::MediaLayer* mediaLayer = mediaLayerForInstance(instance); 582c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenberger if (!mediaLayer) 592c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenberger return 0; 602bac1e45807d68b80f4a5cc7a62d0e3c24a4b6f6Derek Sollenberger 612c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenberger return mediaLayer->acquireNativeWindowForContent(); 626ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger} 636ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger 6435b48db52f4434b8a07ac3529efbb17b994769a1Derek Sollenbergerstatic void anp_invertPluginContent(NPP instance, bool isContentInverted) { 65196a1c3a9cbc24ea20708ec0a6ad8810e2036109Derek Sollenberger WebCore::MediaLayer* mediaLayer = mediaLayerForInstance(instance); 66196a1c3a9cbc24ea20708ec0a6ad8810e2036109Derek Sollenberger if (mediaLayer) 67196a1c3a9cbc24ea20708ec0a6ad8810e2036109Derek Sollenberger mediaLayer->invertContents(isContentInverted); 6835b48db52f4434b8a07ac3529efbb17b994769a1Derek Sollenberger} 6935b48db52f4434b8a07ac3529efbb17b994769a1Derek Sollenberger 7035b48db52f4434b8a07ac3529efbb17b994769a1Derek Sollenberger 716ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger/////////////////////////////////////////////////////////////////////////////// 726ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger 736ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger#define ASSIGN(obj, name) (obj)->name = anp_##name 746ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger 752c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenbergervoid ANPNativeWindowInterfaceV0_Init(ANPInterface* v) { 762c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenberger ANPNativeWindowInterfaceV0* i = reinterpret_cast<ANPNativeWindowInterfaceV0*>(v); 776ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger 782c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenberger ASSIGN(i, acquireNativeWindow); 7935b48db52f4434b8a07ac3529efbb17b994769a1Derek Sollenberger ASSIGN(i, invertPluginContent); 806ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger} 81