mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			211 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			211 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright (c) 2015 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/browser/client_handler_osr.h"
 | |
| 
 | |
| #include "include/base/cef_callback.h"
 | |
| #include "include/wrapper/cef_closure_task.h"
 | |
| #include "include/wrapper/cef_helpers.h"
 | |
| 
 | |
| namespace client {
 | |
| 
 | |
| ClientHandlerOsr::ClientHandlerOsr(Delegate* delegate,
 | |
|                                    OsrDelegate* osr_delegate,
 | |
|                                    bool with_controls,
 | |
|                                    const std::string& startup_url)
 | |
|     : ClientHandler(delegate, /*is_osr=*/true, with_controls, startup_url),
 | |
|       osr_delegate_(osr_delegate) {
 | |
|   DCHECK(osr_delegate_);
 | |
| }
 | |
| 
 | |
| // static
 | |
| CefRefPtr<ClientHandlerOsr> ClientHandlerOsr::GetForClient(
 | |
|     CefRefPtr<CefClient> client) {
 | |
|   auto base = BaseClientHandler::GetForClient(client);
 | |
|   if (base && base->GetTypeKey() == &kTypeKey) {
 | |
|     return static_cast<ClientHandlerOsr*>(base.get());
 | |
|   }
 | |
|   return nullptr;
 | |
| }
 | |
| 
 | |
| void ClientHandlerOsr::DetachOsrDelegate() {
 | |
|   if (!CefCurrentlyOn(TID_UI)) {
 | |
|     // Execute this method on the UI thread.
 | |
|     CefPostTask(TID_UI,
 | |
|                 base::BindOnce(&ClientHandlerOsr::DetachOsrDelegate, this));
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   DCHECK(osr_delegate_);
 | |
|   osr_delegate_ = nullptr;
 | |
| }
 | |
| 
 | |
| void ClientHandlerOsr::OnAfterCreated(CefRefPtr<CefBrowser> browser) {
 | |
|   CEF_REQUIRE_UI_THREAD();
 | |
|   if (osr_delegate_) {
 | |
|     osr_delegate_->OnAfterCreated(browser);
 | |
|   }
 | |
|   ClientHandler::OnAfterCreated(browser);
 | |
| }
 | |
| 
 | |
| void ClientHandlerOsr::OnBeforeClose(CefRefPtr<CefBrowser> browser) {
 | |
|   CEF_REQUIRE_UI_THREAD();
 | |
|   if (osr_delegate_) {
 | |
|     osr_delegate_->OnBeforeClose(browser);
 | |
|   }
 | |
|   ClientHandler::OnBeforeClose(browser);
 | |
| }
 | |
| 
 | |
| bool ClientHandlerOsr::GetRootScreenRect(CefRefPtr<CefBrowser> browser,
 | |
|                                          CefRect& rect) {
 | |
|   CEF_REQUIRE_UI_THREAD();
 | |
|   if (!osr_delegate_) {
 | |
|     return false;
 | |
|   }
 | |
|   return osr_delegate_->GetRootScreenRect(browser, rect);
 | |
| }
 | |
| 
 | |
| void ClientHandlerOsr::GetViewRect(CefRefPtr<CefBrowser> browser,
 | |
|                                    CefRect& rect) {
 | |
|   CEF_REQUIRE_UI_THREAD();
 | |
|   if (!osr_delegate_) {
 | |
|     // Never return an empty rectangle.
 | |
|     rect.width = rect.height = 1;
 | |
|     return;
 | |
|   }
 | |
|   osr_delegate_->GetViewRect(browser, rect);
 | |
| }
 | |
| 
 | |
| bool ClientHandlerOsr::GetScreenPoint(CefRefPtr<CefBrowser> browser,
 | |
|                                       int viewX,
 | |
|                                       int viewY,
 | |
|                                       int& screenX,
 | |
|                                       int& screenY) {
 | |
|   CEF_REQUIRE_UI_THREAD();
 | |
|   if (!osr_delegate_) {
 | |
|     return false;
 | |
|   }
 | |
|   return osr_delegate_->GetScreenPoint(browser, viewX, viewY, screenX, screenY);
 | |
| }
 | |
| 
 | |
| bool ClientHandlerOsr::GetScreenInfo(CefRefPtr<CefBrowser> browser,
 | |
|                                      CefScreenInfo& screen_info) {
 | |
|   CEF_REQUIRE_UI_THREAD();
 | |
|   if (!osr_delegate_) {
 | |
|     return false;
 | |
|   }
 | |
|   return osr_delegate_->GetScreenInfo(browser, screen_info);
 | |
| }
 | |
| 
 | |
| void ClientHandlerOsr::OnPopupShow(CefRefPtr<CefBrowser> browser, bool show) {
 | |
|   CEF_REQUIRE_UI_THREAD();
 | |
|   if (!osr_delegate_) {
 | |
|     return;
 | |
|   }
 | |
|   return osr_delegate_->OnPopupShow(browser, show);
 | |
| }
 | |
| 
 | |
| void ClientHandlerOsr::OnPopupSize(CefRefPtr<CefBrowser> browser,
 | |
|                                    const CefRect& rect) {
 | |
|   CEF_REQUIRE_UI_THREAD();
 | |
|   if (!osr_delegate_) {
 | |
|     return;
 | |
|   }
 | |
|   return osr_delegate_->OnPopupSize(browser, rect);
 | |
| }
 | |
| 
 | |
| void ClientHandlerOsr::OnPaint(CefRefPtr<CefBrowser> browser,
 | |
|                                PaintElementType type,
 | |
|                                const RectList& dirtyRects,
 | |
|                                const void* buffer,
 | |
|                                int width,
 | |
|                                int height) {
 | |
|   CEF_REQUIRE_UI_THREAD();
 | |
|   if (!osr_delegate_) {
 | |
|     return;
 | |
|   }
 | |
|   osr_delegate_->OnPaint(browser, type, dirtyRects, buffer, width, height);
 | |
| }
 | |
| 
 | |
| void ClientHandlerOsr::OnAcceleratedPaint(
 | |
|     CefRefPtr<CefBrowser> browser,
 | |
|     CefRenderHandler::PaintElementType type,
 | |
|     const CefRenderHandler::RectList& dirtyRects,
 | |
|     const CefAcceleratedPaintInfo& info) {
 | |
|   CEF_REQUIRE_UI_THREAD();
 | |
|   if (!osr_delegate_) {
 | |
|     return;
 | |
|   }
 | |
|   osr_delegate_->OnAcceleratedPaint(browser, type, dirtyRects, info);
 | |
| }
 | |
| 
 | |
| bool ClientHandlerOsr::StartDragging(
 | |
|     CefRefPtr<CefBrowser> browser,
 | |
|     CefRefPtr<CefDragData> drag_data,
 | |
|     CefRenderHandler::DragOperationsMask allowed_ops,
 | |
|     int x,
 | |
|     int y) {
 | |
|   CEF_REQUIRE_UI_THREAD();
 | |
|   if (!osr_delegate_) {
 | |
|     return false;
 | |
|   }
 | |
|   return osr_delegate_->StartDragging(browser, drag_data, allowed_ops, x, y);
 | |
| }
 | |
| 
 | |
| void ClientHandlerOsr::UpdateDragCursor(
 | |
|     CefRefPtr<CefBrowser> browser,
 | |
|     CefRenderHandler::DragOperation operation) {
 | |
|   CEF_REQUIRE_UI_THREAD();
 | |
|   if (!osr_delegate_) {
 | |
|     return;
 | |
|   }
 | |
|   osr_delegate_->UpdateDragCursor(browser, operation);
 | |
| }
 | |
| 
 | |
| void ClientHandlerOsr::OnImeCompositionRangeChanged(
 | |
|     CefRefPtr<CefBrowser> browser,
 | |
|     const CefRange& selection_range,
 | |
|     const CefRenderHandler::RectList& character_bounds) {
 | |
|   CEF_REQUIRE_UI_THREAD();
 | |
|   if (!osr_delegate_) {
 | |
|     return;
 | |
|   }
 | |
|   osr_delegate_->OnImeCompositionRangeChanged(browser, selection_range,
 | |
|                                               character_bounds);
 | |
| }
 | |
| 
 | |
| void ClientHandlerOsr::OnAccessibilityTreeChange(CefRefPtr<CefValue> value) {
 | |
|   CEF_REQUIRE_UI_THREAD();
 | |
|   if (!osr_delegate_) {
 | |
|     return;
 | |
|   }
 | |
|   osr_delegate_->UpdateAccessibilityTree(value);
 | |
| }
 | |
| 
 | |
| bool ClientHandlerOsr::OnCursorChange(CefRefPtr<CefBrowser> browser,
 | |
|                                       CefCursorHandle cursor,
 | |
|                                       cef_cursor_type_t type,
 | |
|                                       const CefCursorInfo& custom_cursor_info) {
 | |
|   CEF_REQUIRE_UI_THREAD();
 | |
|   if (ClientHandler::OnCursorChange(browser, cursor, type,
 | |
|                                     custom_cursor_info)) {
 | |
|     return true;
 | |
|   }
 | |
|   if (osr_delegate_) {
 | |
|     osr_delegate_->OnCursorChange(browser, cursor, type, custom_cursor_info);
 | |
|   }
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| void ClientHandlerOsr::OnAccessibilityLocationChange(
 | |
|     CefRefPtr<CefValue> value) {
 | |
|   CEF_REQUIRE_UI_THREAD();
 | |
|   if (!osr_delegate_) {
 | |
|     return;
 | |
|   }
 | |
|   osr_delegate_->UpdateAccessibilityLocation(value);
 | |
| }
 | |
| 
 | |
| }  // namespace client
 |