Index: chrome_frame/ready_mode/internal/ready_prompt_window.cc |
=================================================================== |
--- chrome_frame/ready_mode/internal/ready_prompt_window.cc (revision 72333) |
+++ chrome_frame/ready_mode/internal/ready_prompt_window.cc (working copy) |
@@ -4,33 +4,63 @@ |
#include "chrome_frame/ready_mode/internal/ready_prompt_window.h" |
+#include <atlctrls.h> |
+#include <Shellapi.h> // Must appear before atlctrlx.h |
+ |
+// These seem to be required by atlctrlx? |
+template<class A> |
+A min(A const& a, A const& b) { return a < b ? a : b; } |
+ |
+template<class A> |
+A max(A const& a, A const& b) { return a > b ? a : b; } |
+ |
+#include <atlctrlx.h> |
+ |
#include "base/compiler_specific.h" |
+#include "base/win/scoped_bstr.h" |
+#include "base/win/scoped_comptr.h" |
#include "chrome_frame/ready_mode/internal/ready_mode_state.h" |
+#include "chrome_frame/ready_mode/internal/url_launcher.h" |
+#include "chrome_frame/simple_resource_loader.h" |
+#include "grit/chromium_strings.h" |
-ReadyPromptWindow::ReadyPromptWindow() |
- : frame_(NULL), |
+ReadyPromptWindow::ReadyPromptWindow( |
+ InfobarContent::Frame* frame, ReadyModeState* ready_mode_state, |
+ UrlLauncher* url_launcher) |
+ : frame_(frame), |
+ ready_mode_state_(ready_mode_state), |
+ url_launcher_(url_launcher), |
weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
} |
+ReadyPromptWindow::~ReadyPromptWindow() { |
+} |
-base::WeakPtr<ReadyPromptWindow> ReadyPromptWindow::Initialize( |
- InfobarContent::Frame* frame, ReadyModeState* ready_mode_state) { |
+base::WeakPtr<ReadyPromptWindow> ReadyPromptWindow::CreateInstance( |
+ InfobarContent::Frame* frame, ReadyModeState* ready_mode_state, |
+ UrlLauncher* url_launcher) { |
DCHECK(frame != NULL); |
- DCHECK(frame_ == NULL); |
DCHECK(ready_mode_state != NULL); |
- DCHECK(ready_mode_state_ == NULL); |
+ DCHECK(url_launcher != NULL); |
- frame_ = frame; |
- ready_mode_state_.reset(ready_mode_state); |
+ base::WeakPtr<ReadyPromptWindow> instance((new ReadyPromptWindow( |
+ frame, ready_mode_state, url_launcher))->weak_ptr_factory_.GetWeakPtr()); |
- DCHECK(!IsWindow()); |
+ DCHECK(!instance->IsWindow()); |
- if (Create(frame->GetFrameWindow()) == NULL) { |
+ if (instance->Create(frame->GetFrameWindow()) == NULL) { |
DPLOG(ERROR) << "Failed to create HWND for ReadyPromptWindow."; |
- delete this; |
return base::WeakPtr<ReadyPromptWindow>(); |
} |
- return weak_ptr_factory_.GetWeakPtr(); |
+ // Subclass the "Learn more." text to make it behave like a link. Clicks are |
+ // routed to OnLearnMore(). |
+ CWindow rte = instance->GetDlgItem(IDC_PROMPT_LINK); |
+ instance->link_.reset(new CHyperLink()); |
+ instance->link_->SubclassWindow(rte); |
+ instance->link_->SetHyperLinkExtendedStyle(HLINK_NOTIFYBUTTON, |
+ HLINK_NOTIFYBUTTON); |
+ |
+ return instance; |
} |
void ReadyPromptWindow::OnDestroy() { |
@@ -69,6 +99,14 @@ |
return 0; |
} |
+LRESULT ReadyPromptWindow::OnLearnMore(WORD /*wParam*/, |
+ LPNMHDR /*lParam*/, |
+ BOOL& /*bHandled*/) { |
+ url_launcher_->LaunchUrl(SimpleResourceLoader::Get( |
+ IDS_CHROME_FRAME_READY_MODE_LEARN_MORE_URL)); |
+ return 0; |
+} |
+ |
void ReadyPromptWindow::OnFinalMessage(HWND) { |
delete this; |
} |