Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome_frame/ready_mode/ready_mode.h" | 5 #include "chrome_frame/ready_mode/ready_mode.h" |
| 6 | 6 |
| 7 #include <atlbase.h> | 7 #include <atlbase.h> |
| 8 #include <shlguid.h> | 8 #include <shlguid.h> |
| 9 | 9 |
| 10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
| 11 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "base/linked_ptr.h" | 12 #include "base/linked_ptr.h" |
| 13 #include "base/scoped_ptr.h" | 13 #include "base/scoped_ptr.h" |
| 14 #include "base/weak_ptr.h" | 14 #include "base/weak_ptr.h" |
| 15 #include "base/win/scoped_bstr.h" | 15 #include "base/win/scoped_bstr.h" |
| 16 #include "base/win/scoped_comptr.h" | 16 #include "base/win/scoped_comptr.h" |
| 17 #include "base/win/win_util.h" | 17 #include "base/win/win_util.h" |
| 18 #include "net/base/registry_controlled_domain.h" | 18 #include "net/base/registry_controlled_domain.h" |
| 19 #include "chrome/installer/util/package_properties.h" | 19 #include "chrome/installer/util/package_properties.h" |
| 20 #include "chrome_frame/infobars/infobar_manager.h" | 20 #include "chrome_frame/infobars/infobar_manager.h" |
| 21 #include "chrome_frame/ready_mode/internal/ready_mode_web_browser_adapter.h" | 21 #include "chrome_frame/ready_mode/internal/ready_mode_web_browser_adapter.h" |
| 22 #include "chrome_frame/ready_mode/internal/ready_prompt_content.h" | 22 #include "chrome_frame/ready_mode/internal/ready_prompt_content.h" |
| 23 #include "chrome_frame/ready_mode/internal/registry_ready_mode_state.h" | 23 #include "chrome_frame/ready_mode/internal/registry_ready_mode_state.h" |
| 24 #include "chrome_frame/ready_mode/internal/url_launcher.h" | |
| 24 #include "chrome_frame/utils.h" | 25 #include "chrome_frame/utils.h" |
| 25 | 26 |
| 26 namespace { | 27 namespace { |
| 27 | 28 |
| 28 // Temporarily disable Ready Mode for 36 hours when the user so indicates. | 29 // Temporarily disable Ready Mode for 36 hours when the user so indicates. |
| 29 const int kTemporaryDeclineDurationMinutes = 60 * 36; | 30 const int kTemporaryDeclineDurationMinutes = 60 * 36; |
| 30 | 31 |
| 31 class BrowserObserver; | 32 class BrowserObserver; |
| 32 | 33 |
| 33 // A helper for BrowserObserver to observe the user's choice in the Ready Mode | 34 // A helper for BrowserObserver to observe the user's choice in the Ready Mode |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 83 GURL rendered_url_; | 84 GURL rendered_url_; |
| 84 linked_ptr<ready_mode::Delegate> chrome_frame_; | 85 linked_ptr<ready_mode::Delegate> chrome_frame_; |
| 85 base::win::ScopedComPtr<IWebBrowser2> web_browser_; | 86 base::win::ScopedComPtr<IWebBrowser2> web_browser_; |
| 86 // The adapter owns us, so we use a weak reference | 87 // The adapter owns us, so we use a weak reference |
| 87 ReadyModeWebBrowserAdapter* adapter_; | 88 ReadyModeWebBrowserAdapter* adapter_; |
| 88 base::WeakPtrFactory<BrowserObserver> weak_ptr_factory_; | 89 base::WeakPtrFactory<BrowserObserver> weak_ptr_factory_; |
| 89 | 90 |
| 90 DISALLOW_COPY_AND_ASSIGN(BrowserObserver); | 91 DISALLOW_COPY_AND_ASSIGN(BrowserObserver); |
| 91 }; // class BrowserObserver | 92 }; // class BrowserObserver |
| 92 | 93 |
| 94 // Implements launching of a URL in an instance of IWebBrowser2. | |
| 95 class UrlLauncherImpl : public UrlLauncher { | |
| 96 public: | |
| 97 explicit UrlLauncherImpl(IWebBrowser2* web_browser); | |
| 98 | |
| 99 // UrlLauncher implementation | |
| 100 void LaunchUrl(const std::wstring& url); | |
| 101 | |
| 102 private: | |
| 103 base::win::ScopedComPtr<IWebBrowser2> web_browser_; | |
| 104 }; // class UrlLaucherImpl | |
| 105 | |
| 106 UrlLauncherImpl::UrlLauncherImpl(IWebBrowser2* web_browser) { | |
| 107 DCHECK(web_browser); | |
| 108 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.
| |
| 109 web_browser_.Attach(web_browser); | |
| 110 } | |
| 111 | |
| 112 void UrlLauncherImpl::LaunchUrl(const std::wstring& url) { | |
| 113 VARIANT flags = { VT_I4 }; | |
| 114 V_I4(&flags) = navOpenInNewWindow; | |
| 115 base::win::ScopedBstr location(url.c_str()); | |
| 116 | |
| 117 HRESULT hr = web_browser_->Navigate(location, &flags, NULL, NULL, NULL); | |
| 118 DLOG_IF(ERROR, FAILED(hr)) << "Failed to invoke Navigate on IWebBrowser2. " | |
| 119 << "Error: " << hr; | |
| 120 } | |
| 121 | |
| 93 StateObserver::StateObserver( | 122 StateObserver::StateObserver( |
| 94 const base::WeakPtr<BrowserObserver>& ready_mode_ui) | 123 const base::WeakPtr<BrowserObserver>& ready_mode_ui) |
| 95 : ready_mode_ui_(ready_mode_ui) { | 124 : ready_mode_ui_(ready_mode_ui) { |
| 96 } | 125 } |
| 97 | 126 |
| 98 StateObserver::~StateObserver() { | 127 StateObserver::~StateObserver() { |
| 99 } | 128 } |
| 100 | 129 |
| 101 void StateObserver::OnStateChange(ReadyModeStatus status) { | 130 void StateObserver::OnStateChange(ReadyModeStatus status) { |
| 102 if (ready_mode_ui_ == NULL) | 131 if (ready_mode_ui_ == NULL) |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 193 new StateObserver(weak_ptr_factory_.GetWeakPtr())); | 222 new StateObserver(weak_ptr_factory_.GetWeakPtr())); |
| 194 | 223 |
| 195 installer::ActivePackageProperties package_properties; | 224 installer::ActivePackageProperties package_properties; |
| 196 | 225 |
| 197 // Owned by infobar_content | 226 // Owned by infobar_content |
| 198 scoped_ptr<ReadyModeState> ready_mode_state(new RegistryReadyModeState( | 227 scoped_ptr<ReadyModeState> ready_mode_state(new RegistryReadyModeState( |
| 199 package_properties.GetStateKey(), | 228 package_properties.GetStateKey(), |
| 200 base::TimeDelta::FromMinutes(kTemporaryDeclineDurationMinutes), | 229 base::TimeDelta::FromMinutes(kTemporaryDeclineDurationMinutes), |
| 201 ready_mode_state_observer.release())); | 230 ready_mode_state_observer.release())); |
| 202 | 231 |
| 232 // Owned by infobar_content | |
| 233 scoped_ptr<UrlLauncher> url_launcher(new UrlLauncherImpl(web_browser_)); | |
| 234 | |
| 203 // Owned by infobar_manager | 235 // Owned by infobar_manager |
| 204 scoped_ptr<InfobarContent> infobar_content( | 236 scoped_ptr<InfobarContent> infobar_content(new ReadyPromptContent( |
| 205 new ReadyPromptContent(ready_mode_state.release())); | 237 ready_mode_state.release(), url_launcher.release())); |
| 206 | 238 |
| 207 infobar_manager->Show(infobar_content.release(), TOP_INFOBAR); | 239 infobar_manager->Show(infobar_content.release(), TOP_INFOBAR); |
| 208 } | 240 } |
| 209 } | 241 } |
| 210 | 242 |
| 211 void BrowserObserver::Hide() { | 243 void BrowserObserver::Hide() { |
| 212 InfobarManager* infobar_manager = GetInfobarManager(); | 244 InfobarManager* infobar_manager = GetInfobarManager(); |
| 213 if (infobar_manager) | 245 if (infobar_manager) |
| 214 infobar_manager->HideAll(); | 246 infobar_manager->HideAll(); |
| 215 } | 247 } |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 353 } | 385 } |
| 354 } | 386 } |
| 355 | 387 |
| 356 // Depending on the state we finally end up in, tell our Delegate to disable | 388 // Depending on the state we finally end up in, tell our Delegate to disable |
| 357 // Chrome Frame functionality. | 389 // Chrome Frame functionality. |
| 358 if (ShouldDisableChromeFrame(status)) | 390 if (ShouldDisableChromeFrame(status)) |
| 359 delegate->DisableChromeFrame(); | 391 delegate->DisableChromeFrame(); |
| 360 } | 392 } |
| 361 | 393 |
| 362 } // namespace ready_mode | 394 } // namespace ready_mode |
| OLD | NEW |