cef/tests/shared/browser/main_message_loop_external_pump.h
Marshall Greenblatt 17fc2b3e3b Various fixes related to the C++11/14 update (see issue #3140)
- Convert scoped_ptr to std::unique_ptr from <memory>
- Convert arraysize to base::size from include/base/cef_cxx17_backports.h
- Convert NULL to nullptr
- Include include/base/cef_callback.h instead of include/base/cef_bind.h
- Implicit conversion of CefRefPtr<T> or scoped_refptr<T> to T* is gone;
  use .get() instead

See the issue for additional details.
2021-06-18 13:42:31 -04:00

71 lines
2.7 KiB
C++

// 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.
#ifndef CEF_TESTS_SHARED_BROWSER_MAIN_MESSAGE_LOOP_EXTERNAL_PUMP_H_
#define CEF_TESTS_SHARED_BROWSER_MAIN_MESSAGE_LOOP_EXTERNAL_PUMP_H_
#pragma once
#include "tests/shared/browser/main_message_loop_std.h"
namespace client {
// This MessageLoop implementation simulates the embedding of CEF into an
// existing host application that runs its own message loop. The scheduling
// implementation provided by this class is very simplistic and does not handle
// all cases (for example, nested message loops on Windows will not function
// correctly). See comments in Chromium's platform-specific
// base/message_loop/message_pump_* source files for additional guidance when
// implementing CefBrowserProcessHandler::OnScheduleMessagePumpWork() in your
// application. Run cefclient or ceftests with the
// "--external-message-pump" command-line flag to test this mode.
class MainMessageLoopExternalPump : public MainMessageLoopStd {
public:
// Creates the singleton instance of this object. Must be called on the main
// application thread.
static std::unique_ptr<MainMessageLoopExternalPump> Create();
// Returns the singleton instance of this object. Safe to call from any
// thread.
static MainMessageLoopExternalPump* Get();
// Called from CefBrowserProcessHandler::OnScheduleMessagePumpWork() on any
// thread. The platform subclass must implement this method and schedule a
// call to OnScheduleWork() on the main application thread.
virtual void OnScheduleMessagePumpWork(int64 delay_ms) = 0;
protected:
// Only allow deletion via std::unique_ptr.
friend std::default_delete<MainMessageLoopExternalPump>;
// Construct and destruct this object on the main application thread.
MainMessageLoopExternalPump();
~MainMessageLoopExternalPump();
// The platform subclass calls this method on the main application thread in
// response to the OnScheduleMessagePumpWork() call.
void OnScheduleWork(int64 delay_ms);
// The platform subclass calls this method on the main application thread when
// the pending work timer times out.
void OnTimerTimeout();
// Control the pending work timer in the platform subclass. Only called on
// the main application thread.
virtual void SetTimer(int64 delay_ms) = 0;
virtual void KillTimer() = 0;
virtual bool IsTimerPending() = 0;
private:
// Handle work processing.
void DoWork();
bool PerformMessageLoopWork();
bool is_active_;
bool reentrancy_detected_;
};
} // namespace client
#endif // CEF_TESTS_SHARED_BROWSER_MAIN_MESSAGE_LOOP_EXTERNAL_PUMP_H_