Home | History | Annotate | Download | only in status_icons
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_UI_VIEWS_STATUS_ICONS_STATUS_TRAY_WIN_H_
      6 #define CHROME_BROWSER_UI_VIEWS_STATUS_ICONS_STATUS_TRAY_WIN_H_
      7 
      8 #include <windows.h>
      9 
     10 #include "base/compiler_specific.h"
     11 #include "base/memory/scoped_ptr.h"
     12 #include "chrome/browser/status_icons/status_tray.h"
     13 
     14 class StatusIconWin;
     15 
     16 // A class that's responsible for increasing, if possible, the visibility
     17 // of a status tray icon on the taskbar. The default implementation sends
     18 // a task to a worker thread each time EnqueueChange is called.
     19 class StatusTrayStateChangerProxy {
     20  public:
     21   // Called by StatusTrayWin to request upgraded visibility on the icon
     22   // represented by the |icon_id|, |window| pair.
     23   virtual void EnqueueChange(UINT icon_id, HWND window) = 0;
     24 };
     25 
     26 class StatusTrayWin : public StatusTray {
     27  public:
     28   StatusTrayWin();
     29   ~StatusTrayWin();
     30 
     31   void UpdateIconVisibilityInBackground(StatusIconWin* status_icon);
     32 
     33   // Exposed for testing.
     34   LRESULT CALLBACK
     35       WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);
     36 
     37  protected:
     38   // Overriden from StatusTray:
     39   virtual StatusIcon* CreatePlatformStatusIcon(StatusIconType type,
     40                                                const gfx::ImageSkia& image,
     41                                                const base::string16& tool_tip)
     42       OVERRIDE;
     43 
     44  private:
     45   FRIEND_TEST_ALL_PREFIXES(StatusTrayWinTest, EnsureVisibleTest);
     46 
     47   // Static callback invoked when a message comes in to our messaging window.
     48   static LRESULT CALLBACK
     49       WndProcStatic(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);
     50 
     51   UINT NextIconId();
     52 
     53   void SetStatusTrayStateChangerProxyForTest(
     54       scoped_ptr<StatusTrayStateChangerProxy> proxy);
     55 
     56   // The unique icon ID we will assign to the next icon.
     57   UINT next_icon_id_;
     58 
     59   // The window class of |window_|.
     60   ATOM atom_;
     61 
     62   // The handle of the module that contains the window procedure of |window_|.
     63   HMODULE instance_;
     64 
     65   // The window used for processing events.
     66   HWND window_;
     67 
     68   // The message ID of the "TaskbarCreated" message, sent to us when we need to
     69   // reset our status icons.
     70   UINT taskbar_created_message_;
     71 
     72   // Manages changes performed on a background thread to manipulate visibility
     73   // of notification icons.
     74   scoped_ptr<StatusTrayStateChangerProxy> state_changer_proxy_;
     75 
     76   DISALLOW_COPY_AND_ASSIGN(StatusTrayWin);
     77 };
     78 
     79 #endif  // CHROME_BROWSER_UI_VIEWS_STATUS_ICONS_STATUS_TRAY_WIN_H_
     80 
     81