Index: chrome_frame/ready_mode/ready_mode.cc |
=================================================================== |
--- chrome_frame/ready_mode/ready_mode.cc (revision 72333) |
+++ 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,33 @@ |
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_ = 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 +228,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); |
} |