| // 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_ |