// Copyright (c) 2016 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 "include/base/cef_callback.h" #include "include/base/cef_weak_ptr.h" #include "include/cef_waitable_event.h" #include "include/views/cef_window.h" #include "include/views/cef_window_delegate.h" class TestWindowDelegate : public CefWindowDelegate { public: // Default window size. static const int kWSize; // Test execution callback. typedef base::Callback)> OnWindowCreatedCallback; typedef base::Callback)> OnWindowDestroyedCallback; typedef base::Callback, int)> OnAcceleratorCallback; typedef base::Callback, const CefKeyEvent&)> OnKeyEventCallback; struct Config { OnWindowCreatedCallback on_window_created; OnWindowDestroyedCallback on_window_destroyed; OnAcceleratorCallback on_accelerator; OnKeyEventCallback on_key_event; bool frameless = false; bool close_window = true; int window_size = kWSize; }; // Creates a Window with a new TestWindowDelegate instance and executes // |window_test| after the Window is created. |event| will be signaled once // the Window is closed. If |frameless| is true the Window will be created // without a frame. If |close_window| is true the Window will be closed // immediately after |window_test| returns. Otherwise, the caller is // responsible for closing the Window passed to |window_test|. static void RunTest(CefRefPtr event, const Config& config); // CefWindowDelegate methods: void OnWindowCreated(CefRefPtr window) override; void OnWindowDestroyed(CefRefPtr window) override; bool IsFrameless(CefRefPtr window) override; CefSize GetPreferredSize(CefRefPtr view) override; bool OnAccelerator(CefRefPtr window, int command_id) override; bool OnKeyEvent(CefRefPtr window, const CefKeyEvent& event) override; private: TestWindowDelegate(CefRefPtr event, const Config& config); ~TestWindowDelegate() override; void OnCloseWindow(); void OnTimeoutWindow(); CefRefPtr event_; Config config_; CefRefPtr window_; bool got_get_preferred_size_ = false; // Must be the last member. base::WeakPtrFactory weak_ptr_factory_; IMPLEMENT_REFCOUNTING(TestWindowDelegate); DISALLOW_COPY_AND_ASSIGN(TestWindowDelegate); };