Home | History | Annotate | Download | only in turndown_prompt
      1 // Copyright 2013 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_FRAME_TURNDOWN_PROMPT_TURNDOWN_PROMPT_WINDOW_H_
      6 #define CHROME_FRAME_TURNDOWN_PROMPT_TURNDOWN_PROMPT_WINDOW_H_
      7 
      8 #include <windows.h>
      9 #include <atlbase.h>
     10 #include <atlapp.h>
     11 #include <atlcrack.h>
     12 #include <atlframe.h>
     13 #include <atltheme.h>
     14 #include <atlwin.h>
     15 
     16 #include "base/debug/debugger.h"
     17 #include "base/callback.h"
     18 #include "base/memory/scoped_ptr.h"
     19 #include "base/memory/weak_ptr.h"
     20 #include "base/strings/string16.h"
     21 #include "base/win/scoped_comptr.h"
     22 #include "base/win/scoped_handle.h"
     23 #include "chrome_frame/infobars/infobar_content.h"
     24 #include "chrome_frame/resource.h"
     25 #include "grit/chrome_frame_dialogs.h"
     26 
     27 class UrlLauncher;
     28 
     29 namespace WTL {
     30 class CHyperLink;
     31 }  // namespace WTL
     32 
     33 // Implements a dialog with text and buttons notifying the user that Chrome
     34 // Frame is being turned down, offering them a link to learn more about moving
     35 // to a modern browser.
     36 class TurndownPromptWindow
     37     : public CDialogImpl<TurndownPromptWindow, CWindow>,
     38       public CDialogResize<TurndownPromptWindow>,
     39       public CThemeImpl<TurndownPromptWindow> {
     40  public:
     41   enum { IDD = IDD_CHROME_FRAME_TURNDOWN_PROMPT };
     42 
     43   // Creates and initializes a dialog for display in the provided frame.  The
     44   // UrlLauncher may be used to launch a new tab containing a knowledge-base
     45   // article about the turndown.
     46   //
     47   // Upon success, takes ownership of itself (to be deleted upon WM_DESTROY) and
     48   // returns a weak pointer to this dialog. Upon failure, returns a null weak
     49   // pointer and deletes self.
     50   //
     51   // In either case, takes ownership of the UrlLauncher but not the frame.
     52   // |uninstall_closure| is invoked if/when the Uninstall button is activated.
     53   static base::WeakPtr<TurndownPromptWindow> CreateInstance(
     54       InfobarContent::Frame* frame,
     55       UrlLauncher* url_launcher,
     56       const base::Closure& uninstall_closure);
     57 
     58   BEGIN_MSG_MAP(InfobarWindow)
     59     CHAIN_MSG_MAP(CThemeImpl<TurndownPromptWindow>)
     60     MSG_WM_DESTROY(OnDestroy)
     61     MSG_WM_INITDIALOG(OnInitDialog)
     62     NOTIFY_HANDLER(IDC_TD_PROMPT_LINK, NM_CLICK, OnLearnMore)
     63     COMMAND_HANDLER(IDUNINSTALL, BN_CLICKED, OnUninstall)
     64     CHAIN_MSG_MAP(CDialogResize<TurndownPromptWindow>)
     65   END_MSG_MAP()
     66 
     67   BEGIN_DLGRESIZE_MAP(InfobarWindow)
     68     DLGRESIZE_CONTROL(IDUNINSTALL, DLSZ_CENTER_Y | DLSZ_MOVE_X)
     69     DLGRESIZE_CONTROL(IDC_TD_PROMPT_LINK, DLSZ_CENTER_Y | DLSZ_MOVE_X)
     70     DLGRESIZE_CONTROL(IDC_TD_PROMPT_MESSAGE, DLSZ_SIZE_Y | DLSZ_SIZE_X)
     71   END_DLGRESIZE_MAP()
     72 
     73   virtual void OnFinalMessage(HWND);
     74 
     75  private:
     76   // Call CreateInstance() to get an initialized TurndownPromptWindow.
     77   TurndownPromptWindow(InfobarContent::Frame* frame,
     78                        UrlLauncher* url_launcher,
     79                        const base::Closure& uninstall_closure);
     80 
     81   // The TurndownPromptWindow manages its own destruction.
     82   virtual ~TurndownPromptWindow();
     83 
     84   // Event handlers.
     85   void OnDestroy();
     86   BOOL OnInitDialog(CWindow wndFocus, LPARAM lInitParam);
     87   LRESULT OnLearnMore(WORD wParam, LPNMHDR lParam, BOOL& bHandled);  // NOLINT
     88   LRESULT OnUninstall(WORD wNotifyCode,
     89                       WORD wID,
     90                       HWND hWndCtl,
     91                       BOOL& bHandled);
     92 
     93   // Returns the prompt text for the current version of IE.
     94   static string16 GetPromptText();
     95 
     96   InfobarContent::Frame* frame_;  // Not owned by this instance
     97   scoped_ptr<WTL::CHyperLink> link_;
     98   scoped_ptr<UrlLauncher> url_launcher_;
     99   base::Closure uninstall_closure_;
    100 
    101   base::WeakPtrFactory<TurndownPromptWindow> weak_ptr_factory_;
    102   DISALLOW_COPY_AND_ASSIGN(TurndownPromptWindow);
    103 };  // class TurndownPromptWindow
    104 
    105 #endif  // CHROME_FRAME_TURNDOWN_PROMPT_TURNDOWN_PROMPT_WINDOW_H_
    106