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