13298a7d84b96ade73c6b170671711a8f2792ae59Steve Block/*
23298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * Copyright 2009, The Android Open Source Project
33298a7d84b96ade73c6b170671711a8f2792ae59Steve Block *
43298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * Redistribution and use in source and binary forms, with or without
53298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * modification, are permitted provided that the following conditions
63298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * are met:
73298a7d84b96ade73c6b170671711a8f2792ae59Steve Block *  * Redistributions of source code must retain the above copyright
83298a7d84b96ade73c6b170671711a8f2792ae59Steve Block *    notice, this list of conditions and the following disclaimer.
93298a7d84b96ade73c6b170671711a8f2792ae59Steve Block *  * Redistributions in binary form must reproduce the above copyright
103298a7d84b96ade73c6b170671711a8f2792ae59Steve Block *    notice, this list of conditions and the following disclaimer in the
113298a7d84b96ade73c6b170671711a8f2792ae59Steve Block *    documentation and/or other materials provided with the distribution.
123298a7d84b96ade73c6b170671711a8f2792ae59Steve Block *
133298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
143298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
153298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
163298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
173298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
183298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
193298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
203298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
213298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
223298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
233298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
243298a7d84b96ade73c6b170671711a8f2792ae59Steve Block */
253298a7d84b96ade73c6b170671711a8f2792ae59Steve Block
263d1195ca6a380e5af16e3a505a007369cf18a4dbSteve Block#ifndef ANPSystem_npapi_h
273d1195ca6a380e5af16e3a505a007369cf18a4dbSteve Block#define ANPSystem_npapi_h
28f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger
29f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger#include "android_npapi.h"
30f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger#include <jni.h>
31f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger
32f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenbergerstruct ANPSystemInterfaceV0 : ANPInterface {
33f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger    /** Return the path name for the current Application's plugin data directory,
34f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger        or NULL if not supported
35f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger     */
36f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger    const char* (*getApplicationDataDirectory)();
37f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger
38f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger    /** A helper function to load java classes from the plugin's apk.  The
39f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger        function looks for a class given the fully qualified and null terminated
40f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger        string representing the className. For example,
41f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger
42f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger        const char* className = "com.android.mypackage.MyClass";
43f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger
44f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger        If the class cannot be found or there is a problem loading the class
45f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger        NULL will be returned.
46f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger     */
47f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger    jclass (*loadJavaClass)(NPP instance, const char* className);
48f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger};
49f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger
509bd15c56f90a9621fccfd28b9017ef1c3dba5ad7Derek Sollenbergerenum ANPPowerStates {
519bd15c56f90a9621fccfd28b9017ef1c3dba5ad7Derek Sollenberger    kDefault_ANPPowerState  = 0,
529bd15c56f90a9621fccfd28b9017ef1c3dba5ad7Derek Sollenberger    kScreenOn_ANPPowerState = 1
539bd15c56f90a9621fccfd28b9017ef1c3dba5ad7Derek Sollenberger};
549bd15c56f90a9621fccfd28b9017ef1c3dba5ad7Derek Sollenbergertypedef int32_t ANPPowerState;
559bd15c56f90a9621fccfd28b9017ef1c3dba5ad7Derek Sollenberger
569bd15c56f90a9621fccfd28b9017ef1c3dba5ad7Derek Sollenbergerstruct ANPSystemInterfaceV1 : ANPSystemInterfaceV0 {
579bd15c56f90a9621fccfd28b9017ef1c3dba5ad7Derek Sollenberger    void (*setPowerState)(NPP instance, ANPPowerState powerState);
589bd15c56f90a9621fccfd28b9017ef1c3dba5ad7Derek Sollenberger};
599bd15c56f90a9621fccfd28b9017ef1c3dba5ad7Derek Sollenberger
602ba37aad78022aacc4d5eca0063532222ed6b444Derek Sollenbergerstruct ANPSystemInterfaceV2 : ANPInterface {
612ba37aad78022aacc4d5eca0063532222ed6b444Derek Sollenberger    /** Return the path name for the current Application's plugin data directory,
622ba37aad78022aacc4d5eca0063532222ed6b444Derek Sollenberger        or NULL if not supported. This directory will change depending on whether
632ba37aad78022aacc4d5eca0063532222ed6b444Derek Sollenberger        or not the plugin is found within an incognito tab.
642ba37aad78022aacc4d5eca0063532222ed6b444Derek Sollenberger     */
652ba37aad78022aacc4d5eca0063532222ed6b444Derek Sollenberger    const char* (*getApplicationDataDirectory)(NPP instance);
662ba37aad78022aacc4d5eca0063532222ed6b444Derek Sollenberger
672ba37aad78022aacc4d5eca0063532222ed6b444Derek Sollenberger    // redeclaration of existing features
682ba37aad78022aacc4d5eca0063532222ed6b444Derek Sollenberger    jclass (*loadJavaClass)(NPP instance, const char* className);
692ba37aad78022aacc4d5eca0063532222ed6b444Derek Sollenberger    void (*setPowerState)(NPP instance, ANPPowerState powerState);
702ba37aad78022aacc4d5eca0063532222ed6b444Derek Sollenberger};
712ba37aad78022aacc4d5eca0063532222ed6b444Derek Sollenberger
723d1195ca6a380e5af16e3a505a007369cf18a4dbSteve Block#endif // ANPSystem_npapi_h
73