1 // Copyright (c) 2014 The Chromium Embedded Framework Authors. All rights
2 // reserved. Use of this source code is governed by a BSD-style license that
3 // can be found in the LICENSE file.
4
5 #include "tests/ceftests/routing_test_handler.h"
6 #include "tests/shared/renderer/client_app_renderer.h"
7
8 using client::ClientAppRenderer;
9
10 namespace {
11
SetRouterConfig(CefMessageRouterConfig & config)12 void SetRouterConfig(CefMessageRouterConfig& config) {
13 config.js_query_function = "testQuery";
14 config.js_cancel_function = "testQueryCancel";
15 }
16
17 // Handle the renderer side of the routing implementation.
18 class RoutingRenderDelegate : public ClientAppRenderer::Delegate {
19 public:
RoutingRenderDelegate()20 RoutingRenderDelegate() {}
21
OnWebKitInitialized(CefRefPtr<ClientAppRenderer> app)22 void OnWebKitInitialized(CefRefPtr<ClientAppRenderer> app) override {
23 // Create the renderer-side router for query handling.
24 CefMessageRouterConfig config;
25 SetRouterConfig(config);
26 message_router_ = CefMessageRouterRendererSide::Create(config);
27 }
28
OnContextCreated(CefRefPtr<ClientAppRenderer> app,CefRefPtr<CefBrowser> browser,CefRefPtr<CefFrame> frame,CefRefPtr<CefV8Context> context)29 void OnContextCreated(CefRefPtr<ClientAppRenderer> app,
30 CefRefPtr<CefBrowser> browser,
31 CefRefPtr<CefFrame> frame,
32 CefRefPtr<CefV8Context> context) override {
33 message_router_->OnContextCreated(browser, frame, context);
34 }
35
OnContextReleased(CefRefPtr<ClientAppRenderer> app,CefRefPtr<CefBrowser> browser,CefRefPtr<CefFrame> frame,CefRefPtr<CefV8Context> context)36 void OnContextReleased(CefRefPtr<ClientAppRenderer> app,
37 CefRefPtr<CefBrowser> browser,
38 CefRefPtr<CefFrame> frame,
39 CefRefPtr<CefV8Context> context) override {
40 message_router_->OnContextReleased(browser, frame, context);
41 }
42
OnProcessMessageReceived(CefRefPtr<ClientAppRenderer> app,CefRefPtr<CefBrowser> browser,CefRefPtr<CefFrame> frame,CefProcessId source_process,CefRefPtr<CefProcessMessage> message)43 bool OnProcessMessageReceived(CefRefPtr<ClientAppRenderer> app,
44 CefRefPtr<CefBrowser> browser,
45 CefRefPtr<CefFrame> frame,
46 CefProcessId source_process,
47 CefRefPtr<CefProcessMessage> message) override {
48 return message_router_->OnProcessMessageReceived(browser, frame,
49 source_process, message);
50 }
51
52 private:
53 CefRefPtr<CefMessageRouterRendererSide> message_router_;
54
55 IMPLEMENT_REFCOUNTING(RoutingRenderDelegate);
56 };
57
58 } // namespace
59
RoutingTestHandler()60 RoutingTestHandler::RoutingTestHandler() {}
61
OnAfterCreated(CefRefPtr<CefBrowser> browser)62 void RoutingTestHandler::OnAfterCreated(CefRefPtr<CefBrowser> browser) {
63 if (!message_router_.get()) {
64 // Create the browser-side router for query handling.
65 CefMessageRouterConfig config;
66 SetRouterConfig(config);
67 message_router_ = CefMessageRouterBrowserSide::Create(config);
68 message_router_->AddHandler(this, false);
69 }
70 TestHandler::OnAfterCreated(browser);
71 }
72
OnBeforeClose(CefRefPtr<CefBrowser> browser)73 void RoutingTestHandler::OnBeforeClose(CefRefPtr<CefBrowser> browser) {
74 message_router_->OnBeforeClose(browser);
75 TestHandler::OnBeforeClose(browser);
76 }
77
OnRenderProcessTerminated(CefRefPtr<CefBrowser> browser,TerminationStatus status)78 void RoutingTestHandler::OnRenderProcessTerminated(
79 CefRefPtr<CefBrowser> browser,
80 TerminationStatus status) {
81 message_router_->OnRenderProcessTerminated(browser);
82 }
83
OnBeforeBrowse(CefRefPtr<CefBrowser> browser,CefRefPtr<CefFrame> frame,CefRefPtr<CefRequest> request,bool user_gesture,bool is_redirect)84 bool RoutingTestHandler::OnBeforeBrowse(CefRefPtr<CefBrowser> browser,
85 CefRefPtr<CefFrame> frame,
86 CefRefPtr<CefRequest> request,
87 bool user_gesture,
88 bool is_redirect) {
89 message_router_->OnBeforeBrowse(browser, frame);
90 return false;
91 }
92
OnProcessMessageReceived(CefRefPtr<CefBrowser> browser,CefRefPtr<CefFrame> frame,CefProcessId source_process,CefRefPtr<CefProcessMessage> message)93 bool RoutingTestHandler::OnProcessMessageReceived(
94 CefRefPtr<CefBrowser> browser,
95 CefRefPtr<CefFrame> frame,
96 CefProcessId source_process,
97 CefRefPtr<CefProcessMessage> message) {
98 return message_router_->OnProcessMessageReceived(browser, frame,
99 source_process, message);
100 }
101
102 // Entry point for creating the test delegate.
103 // Called from client_app_delegates.cc.
CreateRoutingTestHandlerDelegate(ClientAppRenderer::DelegateSet & delegates)104 void CreateRoutingTestHandlerDelegate(
105 ClientAppRenderer::DelegateSet& delegates) {
106 delegates.insert(new RoutingRenderDelegate);
107 }
108