- add sources.
[platform/framework/web/crosswalk.git] / src / chrome_frame / turndown_prompt / turndown_prompt_window.h
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_