forked from mirrors/gecko-dev
		
	 cba747de45
			
		
	
	
		cba747de45
		
	
	
	
	
		
			
			Our telemetry data showed `WinUtils::GetNSWindowPtr` returned nullptr when constructing `TaskbarTabPreview`. We can't find a way to make such a situation, but these crashes tell us we should not assume `GetNSWindowPtr` always returns a valid pointer. A proposed fix is to change the return value of `GetWindowHook()` from a reference to a pointer so that the caller can decide what to do when nullptr is returned. Differential Revision: https://phabricator.services.mozilla.com/D91471
		
			
				
	
	
		
			85 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* vim: se cin sw=2 ts=2 et : */
 | |
| /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 | |
|  *
 | |
|  * This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| #ifndef __mozilla_widget_TaskbarWindowPreview_h__
 | |
| #define __mozilla_widget_TaskbarWindowPreview_h__
 | |
| 
 | |
| #include "nsITaskbarWindowPreview.h"
 | |
| #include "nsITaskbarProgress.h"
 | |
| #include "nsITaskbarOverlayIconController.h"
 | |
| #include "TaskbarPreview.h"
 | |
| #include "nsWeakReference.h"
 | |
| 
 | |
| namespace mozilla {
 | |
| namespace widget {
 | |
| 
 | |
| class TaskbarPreviewButton;
 | |
| class TaskbarWindowPreview : public TaskbarPreview,
 | |
|                              public nsITaskbarWindowPreview,
 | |
|                              public nsITaskbarProgress,
 | |
|                              public nsITaskbarOverlayIconController,
 | |
|                              public nsSupportsWeakReference {
 | |
|   virtual ~TaskbarWindowPreview();
 | |
| 
 | |
|  public:
 | |
|   TaskbarWindowPreview(ITaskbarList4* aTaskbar,
 | |
|                        nsITaskbarPreviewController* aController, HWND aHWND,
 | |
|                        nsIDocShell* aShell);
 | |
|   virtual nsresult Init() override;
 | |
| 
 | |
|   NS_DECL_ISUPPORTS
 | |
|   NS_DECL_NSITASKBARWINDOWPREVIEW
 | |
|   NS_DECL_NSITASKBARPROGRESS
 | |
|   NS_DECL_NSITASKBAROVERLAYICONCONTROLLER
 | |
|   NS_FORWARD_NSITASKBARPREVIEW(TaskbarPreview::)
 | |
| 
 | |
|   virtual LRESULT WndProc(UINT nMsg, WPARAM wParam, LPARAM lParam) override;
 | |
| 
 | |
|  private:
 | |
|   virtual nsresult ShowActive(bool active) override;
 | |
|   virtual HWND& PreviewWindow() override;
 | |
| 
 | |
|   virtual nsresult UpdateTaskbarProperties() override;
 | |
|   virtual nsresult Enable() override;
 | |
|   virtual nsresult Disable() override;
 | |
|   virtual void DetachFromNSWindow() override;
 | |
|   nsresult UpdateButton(uint32_t index);
 | |
|   nsresult UpdateButtons();
 | |
| 
 | |
|   // Is custom drawing enabled?
 | |
|   bool mCustomDrawing;
 | |
|   // Have we made any buttons?
 | |
|   bool mHaveButtons;
 | |
|   // Windows button format
 | |
|   THUMBBUTTON mThumbButtons[nsITaskbarWindowPreview::NUM_TOOLBAR_BUTTONS];
 | |
|   // Pointers to our button class (cached instances)
 | |
|   nsWeakPtr mWeakButtons[nsITaskbarWindowPreview::NUM_TOOLBAR_BUTTONS];
 | |
| 
 | |
|   // Called to update ITaskbarList4 dependent properties
 | |
|   nsresult UpdateTaskbarProgress();
 | |
|   nsresult UpdateOverlayIcon();
 | |
| 
 | |
|   // The taskbar progress
 | |
|   TBPFLAG mState;
 | |
|   ULONGLONG mCurrentValue;
 | |
|   ULONGLONG mMaxValue;
 | |
| 
 | |
|   // Taskbar overlay icon
 | |
|   HICON mOverlayIcon;
 | |
|   nsString mIconDescription;
 | |
| 
 | |
|   // WindowHook procedure for hooking mWnd for taskbar progress and icon stuff
 | |
|   static bool TaskbarWindowHook(void* aContext, HWND hWnd, UINT nMsg,
 | |
|                                 WPARAM wParam, LPARAM lParam, LRESULT* aResult);
 | |
| 
 | |
|   friend class TaskbarPreviewButton;
 | |
| };
 | |
| 
 | |
| }  // namespace widget
 | |
| }  // namespace mozilla
 | |
| 
 | |
| #endif /* __mozilla_widget_TaskbarWindowPreview_h__ */
 |