// 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 this first to avoid type conflicts with CEF headers. #include "tests/unittests/chromium_includes.h" #include "tests/unittests/routing_test_handler.h" #include "tests/cefclient/client_app.h" using client::ClientApp; namespace { void SetRouterConfig(CefMessageRouterConfig& config) { config.js_query_function = "testQuery"; config.js_cancel_function = "testQueryCancel"; } // Handle the renderer side of the routing implementation. class RoutingRenderDelegate : public ClientApp::RenderDelegate { public: RoutingRenderDelegate() {} void OnWebKitInitialized(CefRefPtr app) override { // Create the renderer-side router for query handling. CefMessageRouterConfig config; SetRouterConfig(config); message_router_ = CefMessageRouterRendererSide::Create(config); } void OnContextCreated(CefRefPtr app, CefRefPtr browser, CefRefPtr frame, CefRefPtr context) override { message_router_->OnContextCreated(browser, frame, context); } void OnContextReleased(CefRefPtr app, CefRefPtr browser, CefRefPtr frame, CefRefPtr context) override { message_router_->OnContextReleased(browser, frame, context); } bool OnProcessMessageReceived( CefRefPtr app, CefRefPtr browser, CefProcessId source_process, CefRefPtr message) override { return message_router_->OnProcessMessageReceived( browser, source_process, message); } private: CefRefPtr message_router_; IMPLEMENT_REFCOUNTING(RoutingRenderDelegate); }; } // namespace RoutingTestHandler::RoutingTestHandler() { } void RoutingTestHandler::OnAfterCreated(CefRefPtr browser) { if (!message_router_.get()) { // Create the browser-side router for query handling. CefMessageRouterConfig config; SetRouterConfig(config); message_router_ = CefMessageRouterBrowserSide::Create(config); message_router_->AddHandler(this, false); } TestHandler::OnAfterCreated(browser); } void RoutingTestHandler::OnBeforeClose(CefRefPtr browser) { message_router_->OnBeforeClose(browser); TestHandler::OnBeforeClose(browser); } void RoutingTestHandler::OnRenderProcessTerminated( CefRefPtr browser, TerminationStatus status) { message_router_->OnRenderProcessTerminated(browser); } bool RoutingTestHandler::OnBeforeBrowse(CefRefPtr browser, CefRefPtr frame, CefRefPtr request, bool is_redirect) { message_router_->OnBeforeBrowse(browser, frame); return false; } bool RoutingTestHandler::OnProcessMessageReceived( CefRefPtr browser, CefProcessId source_process, CefRefPtr message) { return message_router_->OnProcessMessageReceived( browser, source_process, message); } // Entry point for creating the test delegate. // Called from client_app_delegates.cc. void CreateRoutingTestHandlerDelegate( ClientApp::RenderDelegateSet& delegates) { delegates.insert(new RoutingRenderDelegate); }