mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			98 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright (c) 2012 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 "tests/cefclient/renderer/client_renderer.h"
 | |
| 
 | |
| #include <sstream>
 | |
| #include <string>
 | |
| 
 | |
| #include "include/cef_crash_util.h"
 | |
| #include "include/cef_dom.h"
 | |
| #include "include/wrapper/cef_helpers.h"
 | |
| #include "include/wrapper/cef_message_router.h"
 | |
| 
 | |
| namespace client::renderer {
 | |
| 
 | |
| namespace {
 | |
| 
 | |
| // Must match the value in client_handler.cc.
 | |
| const char kFocusedNodeChangedMessage[] = "ClientRenderer.FocusedNodeChanged";
 | |
| 
 | |
| class ClientRenderDelegate : public ClientAppRenderer::Delegate {
 | |
|  public:
 | |
|   ClientRenderDelegate() = default;
 | |
| 
 | |
|   void OnWebKitInitialized(CefRefPtr<ClientAppRenderer> app) override {
 | |
|     if (CefCrashReportingEnabled()) {
 | |
|       // Set some crash keys for testing purposes. Keys must be defined in the
 | |
|       // "crash_reporter.cfg" file. See cef_crash_util.h for details.
 | |
|       CefSetCrashKeyValue("testkey_small1", "value1_small_renderer");
 | |
|       CefSetCrashKeyValue("testkey_small2", "value2_small_renderer");
 | |
|       CefSetCrashKeyValue("testkey_medium1", "value1_medium_renderer");
 | |
|       CefSetCrashKeyValue("testkey_medium2", "value2_medium_renderer");
 | |
|       CefSetCrashKeyValue("testkey_large1", "value1_large_renderer");
 | |
|       CefSetCrashKeyValue("testkey_large2", "value2_large_renderer");
 | |
|     }
 | |
| 
 | |
|     // Create the renderer-side router for query handling.
 | |
|     CefMessageRouterConfig config;
 | |
|     message_router_ = CefMessageRouterRendererSide::Create(config);
 | |
|   }
 | |
| 
 | |
|   void OnContextCreated(CefRefPtr<ClientAppRenderer> app,
 | |
|                         CefRefPtr<CefBrowser> browser,
 | |
|                         CefRefPtr<CefFrame> frame,
 | |
|                         CefRefPtr<CefV8Context> context) override {
 | |
|     message_router_->OnContextCreated(browser, frame, context);
 | |
|   }
 | |
| 
 | |
|   void OnContextReleased(CefRefPtr<ClientAppRenderer> app,
 | |
|                          CefRefPtr<CefBrowser> browser,
 | |
|                          CefRefPtr<CefFrame> frame,
 | |
|                          CefRefPtr<CefV8Context> context) override {
 | |
|     message_router_->OnContextReleased(browser, frame, context);
 | |
|   }
 | |
| 
 | |
|   void OnFocusedNodeChanged(CefRefPtr<ClientAppRenderer> app,
 | |
|                             CefRefPtr<CefBrowser> browser,
 | |
|                             CefRefPtr<CefFrame> frame,
 | |
|                             CefRefPtr<CefDOMNode> node) override {
 | |
|     bool is_editable = (node.get() && node->IsEditable());
 | |
|     if (is_editable != last_node_is_editable_) {
 | |
|       // Notify the browser of the change in focused element type.
 | |
|       last_node_is_editable_ = is_editable;
 | |
|       CefRefPtr<CefProcessMessage> message =
 | |
|           CefProcessMessage::Create(kFocusedNodeChangedMessage);
 | |
|       message->GetArgumentList()->SetBool(0, is_editable);
 | |
|       frame->SendProcessMessage(PID_BROWSER, message);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   bool OnProcessMessageReceived(CefRefPtr<ClientAppRenderer> app,
 | |
|                                 CefRefPtr<CefBrowser> browser,
 | |
|                                 CefRefPtr<CefFrame> frame,
 | |
|                                 CefProcessId source_process,
 | |
|                                 CefRefPtr<CefProcessMessage> message) override {
 | |
|     return message_router_->OnProcessMessageReceived(browser, frame,
 | |
|                                                      source_process, message);
 | |
|   }
 | |
| 
 | |
|  private:
 | |
|   bool last_node_is_editable_ = false;
 | |
| 
 | |
|   // Handles the renderer side of query routing.
 | |
|   CefRefPtr<CefMessageRouterRendererSide> message_router_;
 | |
| 
 | |
|   DISALLOW_COPY_AND_ASSIGN(ClientRenderDelegate);
 | |
|   IMPLEMENT_REFCOUNTING(ClientRenderDelegate);
 | |
| };
 | |
| 
 | |
| }  // namespace
 | |
| 
 | |
| void CreateDelegates(ClientAppRenderer::DelegateSet& delegates) {
 | |
|   delegates.insert(new ClientRenderDelegate);
 | |
| }
 | |
| 
 | |
| }  // namespace client::renderer
 |