1 /* -*- Mode: c++; tab-width: 2; indent-tabs-mode: nil; -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #ifndef nsAppShell_h__ 7 #define nsAppShell_h__ 8 9 #include "nsBaseAppShell.h" 10 #include <windows.h> 11 #include <vector> 12 #include "mozilla/TimeStamp.h" 13 #include "mozilla/Mutex.h" 14 15 // The maximum time we allow before forcing a native event callback. 16 // In seconds. 17 #define NATIVE_EVENT_STARVATION_LIMIT 1 18 19 /** 20 * Native Win32 Application shell wrapper 21 */ 22 class nsAppShell : public nsBaseAppShell { 23 public: nsAppShell()24 nsAppShell() 25 : mEventWnd(nullptr), 26 mNativeCallbackPending(false), 27 mLastNativeEventScheduledMutex( 28 "nsAppShell::mLastNativeEventScheduledMutex") {} 29 typedef mozilla::TimeStamp TimeStamp; 30 typedef mozilla::Mutex Mutex; 31 32 nsresult Init(); 33 void DoProcessMoreGeckoEvents(); 34 35 static UINT GetTaskbarButtonCreatedMessage(); 36 37 NS_IMETHOD AfterProcessNextEvent(nsIThreadInternal* thread, 38 bool eventWasProcessed) final; 39 40 protected: 41 NS_IMETHOD Run() override; 42 NS_IMETHOD Exit() override; 43 NS_IMETHOD Observe(nsISupports* aSubject, const char* aTopic, 44 const char16_t* aData) override; 45 46 virtual void ScheduleNativeEventCallback(); 47 virtual bool ProcessNextNativeEvent(bool mayWait); 48 virtual ~nsAppShell(); 49 50 static LRESULT CALLBACK EventWindowProc(HWND, UINT, WPARAM, LPARAM); 51 52 protected: 53 HWND mEventWnd; 54 bool mNativeCallbackPending; 55 56 Mutex mLastNativeEventScheduledMutex; 57 TimeStamp mLastNativeEventScheduled; 58 std::vector<MSG> mMsgsToRepost; 59 }; 60 61 #endif // nsAppShell_h__ 62