| 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;
|
| }
|
|
|