native/message_router_handler.cpp (57 lines of code) (raw):

// Copyright (c) 2014 The Chromium Embedded Framework Authors. All rights // reserved. Use of this source code is governed by a BSD-style license that // can be found in the LICENSE file. #include "message_router_handler.h" #include "jni_util.h" namespace { using CefQueryCallback = CefMessageRouterBrowserSide::Callback; // JNI CefQueryCallback object. class ScopedJNIQueryCallback : public ScopedJNIObject<CefQueryCallback> { public: ScopedJNIQueryCallback(JNIEnv* env, CefRefPtr<CefQueryCallback> obj) : ScopedJNIObject<CefQueryCallback>(env, obj, "org/cef/callback/CefQueryCallback_N", "CefQueryCallback") {} }; } // namespace MessageRouterHandler::MessageRouterHandler(JNIEnv* env, jobject handler) : handle_(env, handler) {} bool MessageRouterHandler::OnQuery( CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame, int64_t query_id, const CefString& request, bool persistent, CefRefPtr<CefMessageRouterBrowserSide::Callback> callback) { ScopedJNIEnv env; if (!env) return false; ScopedJNIBrowser jbrowser(env, browser); ScopedJNIFrame jframe(env, frame); jframe.SetTemporary(); ScopedJNIString jrequest(env, request); ScopedJNIQueryCallback jcallback(env, callback); jboolean jresult = JNI_FALSE; JNI_CALL_METHOD(env, handle_, "onQuery", "(Lorg/cef/browser/CefBrowser;Lorg/cef/browser/" "CefFrame;JLjava/lang/String;ZLorg/cef/" "callback/CefQueryCallback;)Z", Boolean, jresult, jbrowser.get(), jframe.get(), (jlong)query_id, jrequest.get(), persistent ? JNI_TRUE : JNI_FALSE, jcallback.get()); if (jresult == JNI_FALSE) { // If the Java method returns "false" the callback won't be used and // the reference can therefore be removed. jcallback.SetTemporary(); } return jresult != JNI_FALSE; } void MessageRouterHandler::OnQueryCanceled(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame, int64_t query_id) { ScopedJNIEnv env; if (!env) return; ScopedJNIBrowser jbrowser(env, browser); ScopedJNIFrame jframe(env, frame); jframe.SetTemporary(); JNI_CALL_VOID_METHOD( env, handle_, "onQueryCanceled", "(Lorg/cef/browser/CefBrowser;Lorg/cef/browser/CefFrame;J)V", jbrowser.get(), jframe.get(), (jlong)query_id); }