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