| // 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 scoped_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 scoped_ptr. |
| friend struct base::DefaultDeleter<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_ |