Chromium Code Reviews| Index: chrome_frame/ready_mode/ready_mode.cc |
| =================================================================== |
| --- chrome_frame/ready_mode/ready_mode.cc (revision 72310) |
| +++ chrome_frame/ready_mode/ready_mode.cc (working copy) |
| @@ -21,6 +21,7 @@ |
| #include "chrome_frame/ready_mode/internal/ready_mode_web_browser_adapter.h" |
| #include "chrome_frame/ready_mode/internal/ready_prompt_content.h" |
| #include "chrome_frame/ready_mode/internal/registry_ready_mode_state.h" |
| +#include "chrome_frame/ready_mode/internal/url_launcher.h" |
| #include "chrome_frame/utils.h" |
| namespace { |
| @@ -90,6 +91,34 @@ |
| DISALLOW_COPY_AND_ASSIGN(BrowserObserver); |
| }; // class BrowserObserver |
| +// Implements launching of a URL in an instance of IWebBrowser2. |
| +class UrlLauncherImpl : public UrlLauncher { |
| + public: |
| + explicit UrlLauncherImpl(IWebBrowser2* web_browser); |
| + |
| + // UrlLauncher implementation |
| + void LaunchUrl(const std::wstring& url); |
| + |
| + private: |
| + base::win::ScopedComPtr<IWebBrowser2> web_browser_; |
| +}; // class UrlLaucherImpl |
| + |
| +UrlLauncherImpl::UrlLauncherImpl(IWebBrowser2* web_browser) { |
| + DCHECK(web_browser); |
| + web_browser->AddRef(); |
|
tommi (sloooow) - chröme
2011/01/24 17:54:23
use the = operator? (it comes from the scoped_ref
erikwright (departed)
2011/01/24 18:55:19
Done.
|
| + web_browser_.Attach(web_browser); |
| +} |
| + |
| +void UrlLauncherImpl::LaunchUrl(const std::wstring& url) { |
| + VARIANT flags = { VT_I4 }; |
| + V_I4(&flags) = navOpenInNewWindow; |
| + base::win::ScopedBstr location(url.c_str()); |
| + |
| + HRESULT hr = web_browser_->Navigate(location, &flags, NULL, NULL, NULL); |
| + DLOG_IF(ERROR, FAILED(hr)) << "Failed to invoke Navigate on IWebBrowser2. " |
| + << "Error: " << hr; |
| +} |
| + |
| StateObserver::StateObserver( |
| const base::WeakPtr<BrowserObserver>& ready_mode_ui) |
| : ready_mode_ui_(ready_mode_ui) { |
| @@ -200,9 +229,12 @@ |
| base::TimeDelta::FromMinutes(kTemporaryDeclineDurationMinutes), |
| ready_mode_state_observer.release())); |
| + // Owned by infobar_content |
| + scoped_ptr<UrlLauncher> url_launcher(new UrlLauncherImpl(web_browser_)); |
| + |
| // Owned by infobar_manager |
| - scoped_ptr<InfobarContent> infobar_content( |
| - new ReadyPromptContent(ready_mode_state.release())); |
| + scoped_ptr<InfobarContent> infobar_content(new ReadyPromptContent( |
| + ready_mode_state.release(), url_launcher.release())); |
| infobar_manager->Show(infobar_content.release(), TOP_INFOBAR); |
| } |