// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CONTENT_COMMON_GIN_JAVA_BRIDGE_MESSAGES_H_
#define CONTENT_COMMON_GIN_JAVA_BRIDGE_MESSAGES_H_

// IPC messages for injected Java objects (Gin-based implementation).

#include <stdint.h>

#include "content/common/android/gin_java_bridge_errors.h"
#include "content/common/content_export.h"
#include "ipc/ipc_message_macros.h"

#undef IPC_MESSAGE_EXPORT
#define IPC_MESSAGE_EXPORT CONTENT_EXPORT
#define IPC_MESSAGE_START GinJavaBridgeMsgStart

// Messages for handling Java objects injected into JavaScript -----------------

IPC_ENUM_TRAITS_MAX_VALUE(content::GinJavaBridgeError,
                          content::kGinJavaBridgeErrorLast)

// Sent from browser to renderer to add a Java object with the given name.
// Object IDs are generated on the browser side.
IPC_MESSAGE_ROUTED2(GinJavaBridgeMsg_AddNamedObject,
                    std::string /* name */,
                    int32_t /* object_id */)

// Sent from browser to renderer to remove a Java object with the given name.
IPC_MESSAGE_ROUTED1(GinJavaBridgeMsg_RemoveNamedObject,
                    std::string /* name */)

// Sent from renderer to browser to get information about methods of
// the given object. The query will only succeed if inspection of injected
// objects is enabled on the browser side.
IPC_SYNC_MESSAGE_ROUTED1_1(GinJavaBridgeHostMsg_GetMethods,
                           int32_t /* object_id */,
                           std::set<std::string> /* returned_method_names */)

// Sent from renderer to browser to find out, if an object has a method with
// the given name.
IPC_SYNC_MESSAGE_ROUTED2_1(GinJavaBridgeHostMsg_HasMethod,
                           int32_t /* object_id */,
                           std::string /* method_name */,
                           bool /* result */)

// Sent from renderer to browser to invoke a method. Method arguments
// are chained into |arguments| list. base::ListValue is used for |result| as
// a container to work around immutability of base::Value.
// Empty result list indicates that an error has happened on the Java side
// (either bridge-induced error or an unhandled Java exception) and an exception
// must be thrown into JavaScript. |error_code| indicates the cause of
// the error.
// Some special value types that are not supported by base::Value are encoded
// as BinaryValues via GinJavaBridgeValue.
IPC_SYNC_MESSAGE_ROUTED3_2(GinJavaBridgeHostMsg_InvokeMethod,
                           int32_t /* object_id */,
                           std::string /* method_name */,
                           base::ListValue /* arguments */,
                           base::ListValue /* result */,
                           content::GinJavaBridgeError /* error_code */)

// Sent from renderer to browser in two cases:
//
//  1. (Main usage) To inform that the JS wrapper of the object has
//     been completely dereferenced and garbage-collected.
//
//  2. To notify the browser that wrapper creation has failed.  The browser side
//     assumes optimistically that every time an object is returned from a
//     method, the corresponding wrapper object will be successfully created on
//     the renderer side. Sending of this message informs the browser whether
//     this expectation has failed.
IPC_MESSAGE_ROUTED1(GinJavaBridgeHostMsg_ObjectWrapperDeleted,
                    int32_t /* object_id */)

#endif  // CONTENT_COMMON_GIN_JAVA_BRIDGE_MESSAGES_H_
