]> git.sesse.net Git - casparcg/blobdiff - dependencies64/cef/windows/tests/cefclient/browser/main_message_loop_multithreaded_win.h
Upgrade CEF to 3.3029.1611.g44e39a8 / Chromium 58.0.3029.81.
[casparcg] / dependencies64 / cef / windows / tests / cefclient / browser / main_message_loop_multithreaded_win.h
diff --git a/dependencies64/cef/windows/tests/cefclient/browser/main_message_loop_multithreaded_win.h b/dependencies64/cef/windows/tests/cefclient/browser/main_message_loop_multithreaded_win.h
new file mode 100644 (file)
index 0000000..5e6e32d
--- /dev/null
@@ -0,0 +1,61 @@
+// 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.
+
+#ifndef CEF_TESTS_CEFCLIENT_BROWSER_MAIN_MESSAGE_LOOP_MULTITHREADED_WIN_H_
+#define CEF_TESTS_CEFCLIENT_BROWSER_MAIN_MESSAGE_LOOP_MULTITHREADED_WIN_H_
+#pragma once
+
+#include <windows.h>
+#include <queue>
+
+#include "include/base/cef_lock.h"
+#include "include/base/cef_platform_thread.h"
+#include "tests/shared/browser/main_message_loop.h"
+
+namespace client {
+
+// Represents the main message loop in the browser process when using multi-
+// threaded message loop mode on Windows. In this mode there is no Chromium
+// message loop running on the main application thread. Instead, this
+// implementation utilizes a hidden message window for running tasks.
+class MainMessageLoopMultithreadedWin : public MainMessageLoop {
+ public:
+  MainMessageLoopMultithreadedWin();
+  ~MainMessageLoopMultithreadedWin();
+
+  // MainMessageLoop methods.
+  int Run() OVERRIDE;
+  void Quit() OVERRIDE;
+  void PostTask(CefRefPtr<CefTask> task) OVERRIDE;
+  bool RunsTasksOnCurrentThread() const OVERRIDE;
+  void SetCurrentModelessDialog(HWND hWndDialog) OVERRIDE;
+
+ private:
+  // Create the message window.
+  static HWND CreateMessageWindow(HINSTANCE hInstance);
+
+  // Window procedure for the message window.
+  static LRESULT CALLBACK MessageWndProc(HWND hWnd, UINT message, WPARAM wParam,
+                                         LPARAM lParam);
+
+  void PostTaskInternal(CefRefPtr<CefTask> task);
+
+  base::PlatformThreadId thread_id_;
+  UINT task_message_id_;
+
+  // Only accessed on the main thread.
+  HWND dialog_hwnd_;
+
+  base::Lock lock_;
+
+  // Must be protected by |lock_|.
+  HWND message_hwnd_;
+  std::queue<CefRefPtr<CefTask> > queued_tasks_;
+
+  DISALLOW_COPY_AND_ASSIGN(MainMessageLoopMultithreadedWin);
+};
+
+}  // namespace client
+
+#endif  // CEF_TESTS_CEFCLIENT_BROWSER_MAIN_MESSAGE_LOOP_MULTITHREADED_WIN_H_