]> git.sesse.net Git - casparcg/blobdiff - dependencies64/cef/windows/tests/shared/browser/main_message_loop_external_pump.h
Upgrade CEF to 3.3029.1611.g44e39a8 / Chromium 58.0.3029.81.
[casparcg] / dependencies64 / cef / windows / tests / shared / browser / main_message_loop_external_pump.h
diff --git a/dependencies64/cef/windows/tests/shared/browser/main_message_loop_external_pump.h b/dependencies64/cef/windows/tests/shared/browser/main_message_loop_external_pump.h
new file mode 100644 (file)
index 0000000..a25af46
--- /dev/null
@@ -0,0 +1,70 @@
+// 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_