Index: chrome_frame/turndown_prompt/turndown_prompt.cc |
diff --git a/chrome_frame/turndown_prompt/turndown_prompt.cc b/chrome_frame/turndown_prompt/turndown_prompt.cc |
deleted file mode 100644 |
index 19d69ddd8ea72a65853d8d31c4c3d63f809647b6..0000000000000000000000000000000000000000 |
--- a/chrome_frame/turndown_prompt/turndown_prompt.cc |
+++ /dev/null |
@@ -1,287 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome_frame/turndown_prompt/turndown_prompt.h" |
- |
-#include <atlbase.h> |
-#include <shlguid.h> |
- |
-#include "base/bind.h" |
-#include "base/compiler_specific.h" |
-#include "base/logging.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/path_service.h" |
-#include "base/process/launch.h" |
-#include "base/win/scoped_bstr.h" |
-#include "base/win/scoped_comptr.h" |
-#include "base/win/win_util.h" |
-#include "chrome/installer/util/browser_distribution.h" |
-#include "chrome/installer/util/google_update_settings.h" |
-#include "chrome/installer/util/install_util.h" |
-#include "chrome/installer/util/installation_state.h" |
-#include "chrome/installer/util/util_constants.h" |
-#include "chrome_frame/infobars/infobar_manager.h" |
-#include "chrome_frame/policy_settings.h" |
-#include "chrome_frame/ready_mode/internal/ready_mode_web_browser_adapter.h" |
-#include "chrome_frame/ready_mode/internal/url_launcher.h" |
-#include "chrome_frame/simple_resource_loader.h" |
-#include "chrome_frame/turndown_prompt/turndown_prompt_content.h" |
-#include "chrome_frame/utils.h" |
-#include "grit/chromium_strings.h" |
-#include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
- |
-namespace { |
- |
-void OnUninstallClicked(UrlLauncher* url_launcher); |
- |
-// Manages the Turndown UI in response to browsing ChromeFrame-rendered |
-// pages. |
-class BrowserObserver : public ReadyModeWebBrowserAdapter::Observer { |
- public: |
- BrowserObserver(IWebBrowser2* web_browser, |
- ReadyModeWebBrowserAdapter* adapter); |
- |
- // ReadyModeWebBrowserAdapter::Observer implementation |
- virtual void OnNavigateTo(const base::string16& url); |
- virtual void OnRenderInChromeFrame(const base::string16& url); |
- virtual void OnRenderInHost(const base::string16& url); |
- |
- private: |
- // Shows the turndown prompt. |
- void ShowPrompt(); |
- void Hide(); |
- // Returns a self-managed pointer that is not guaranteed to survive handling |
- // of Windows events. For safety's sake, retrieve this pointer for each use |
- // and do not store it for use outside of scope. |
- InfobarManager* GetInfobarManager(); |
- |
- GURL rendered_url_; |
- base::win::ScopedComPtr<IWebBrowser2> web_browser_; |
- ReadyModeWebBrowserAdapter* adapter_; |
- |
- DISALLOW_COPY_AND_ASSIGN(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 base::string16& url); |
- |
- private: |
- base::win::ScopedComPtr<IWebBrowser2> web_browser_; |
-}; |
- |
-UrlLauncherImpl::UrlLauncherImpl(IWebBrowser2* web_browser) { |
- DCHECK(web_browser); |
- web_browser_ = web_browser; |
-} |
- |
-void UrlLauncherImpl::LaunchUrl(const base::string16& 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; |
-} |
- |
-BrowserObserver::BrowserObserver(IWebBrowser2* web_browser, |
- ReadyModeWebBrowserAdapter* adapter) |
- : web_browser_(web_browser), |
- adapter_(adapter) { |
-} |
- |
-void BrowserObserver::OnNavigateTo(const base::string16& url) { |
- if (!net::registry_controlled_domains::SameDomainOrHost( |
- GURL(url), |
- rendered_url_, |
- net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES)) { |
- rendered_url_ = GURL(); |
- Hide(); |
- } |
-} |
- |
-void BrowserObserver::OnRenderInChromeFrame(const base::string16& url) { |
- ShowPrompt(); |
- rendered_url_ = GURL(url); |
-} |
- |
-void BrowserObserver::OnRenderInHost(const base::string16& url) { |
- Hide(); |
- rendered_url_ = GURL(url); |
-} |
- |
-void BrowserObserver::ShowPrompt() { |
- // This pointer is self-managed and not guaranteed to survive handling of |
- // Windows events. For safety's sake, retrieve this pointer for each use and |
- // do not store it for use outside of scope. |
- InfobarManager* infobar_manager = GetInfobarManager(); |
- |
- if (infobar_manager) { |
- // Owned by infobar_content |
- scoped_ptr<UrlLauncher> url_launcher(new UrlLauncherImpl(web_browser_)); |
- |
- // Owned by infobar_manager |
- scoped_ptr<InfobarContent> infobar_content(new TurndownPromptContent( |
- url_launcher.release(), |
- base::Bind(&OnUninstallClicked, |
- base::Owned(new UrlLauncherImpl(web_browser_))))); |
- |
- infobar_manager->Show(infobar_content.release(), TOP_INFOBAR); |
- } |
-} |
- |
-void BrowserObserver::Hide() { |
- InfobarManager* infobar_manager = GetInfobarManager(); |
- if (infobar_manager) |
- infobar_manager->HideAll(); |
-} |
- |
-InfobarManager* BrowserObserver::GetInfobarManager() { |
- HRESULT hr = NOERROR; |
- |
- base::win::ScopedComPtr<IOleWindow> ole_window; |
- hr = DoQueryService(SID_SShellBrowser, web_browser_, ole_window.Receive()); |
- if (FAILED(hr) || ole_window == NULL) { |
- DLOG(ERROR) << "Failed to query SID_SShellBrowser from IWebBrowser2. " |
- << "Error: " << hr; |
- return NULL; |
- } |
- |
- HWND web_browser_hwnd = NULL; |
- hr = ole_window->GetWindow(&web_browser_hwnd); |
- if (FAILED(hr) || web_browser_hwnd == NULL) { |
- DLOG(ERROR) << "Failed to query HWND from IOleWindow. " |
- << "Error: " << hr; |
- return NULL; |
- } |
- |
- return InfobarManager::Get(web_browser_hwnd); |
-} |
- |
-// Returns true if the module into which this code is linked is installed at |
-// system-level. |
-bool IsCurrentModuleSystemLevel() { |
- base::FilePath dll_path; |
- if (PathService::Get(base::DIR_MODULE, &dll_path)) |
- return !InstallUtil::IsPerUserInstall(dll_path.value().c_str()); |
- return false; |
-} |
- |
-// Attempts to create a ReadyModeWebBrowserAdapter instance. |
-bool CreateWebBrowserAdapter(ReadyModeWebBrowserAdapter** adapter) { |
- *adapter = NULL; |
- |
- CComObject<ReadyModeWebBrowserAdapter>* com_object; |
- HRESULT hr = |
- CComObject<ReadyModeWebBrowserAdapter>::CreateInstance(&com_object); |
- |
- if (FAILED(hr)) { |
- DLOG(ERROR) << "Failed to create instance of ReadyModeWebBrowserAdapter. " |
- << "Error: " << hr; |
- return false; |
- } |
- |
- com_object->AddRef(); |
- *adapter = com_object; |
- return true; |
-} |
- |
-// Attempts to install Turndown prompts in the provided web browser. |
-bool InstallPrompts(IWebBrowser2* web_browser) { |
- base::win::ScopedComPtr<ReadyModeWebBrowserAdapter, NULL> adapter; |
- |
- if (!CreateWebBrowserAdapter(adapter.Receive())) |
- return false; |
- |
- // Pass ownership of our delegate to the BrowserObserver |
- scoped_ptr<ReadyModeWebBrowserAdapter::Observer> browser_observer( |
- new BrowserObserver(web_browser, adapter)); |
- |
- // Owns the BrowserObserver |
- return adapter->Initialize(web_browser, browser_observer.release()); |
-} |
- |
-// Launches the Chrome Frame uninstaller in response to user action. This |
-// implementation should not be used to uninstall MSI-based versions of GCF, |
-// since those must be removed by way of Windows Installer machinery. |
-void LaunchChromeFrameUninstaller() { |
- BrowserDistribution* dist = |
- BrowserDistribution::GetSpecificDistribution( |
- BrowserDistribution::CHROME_FRAME); |
- const bool system_level = IsCurrentModuleSystemLevel(); |
- installer::ProductState product_state; |
- if (!product_state.Initialize(system_level, dist)) { |
- DLOG(ERROR) << "Chrome frame isn't installed at " |
- << (system_level ? "system" : "user") << " level."; |
- return; |
- } |
- |
- CommandLine uninstall_command(product_state.uninstall_command()); |
- if (uninstall_command.GetProgram().empty()) { |
- DLOG(ERROR) << "No uninstall command found in registry."; |
- return; |
- } |
- |
- // Force Uninstall silences the prompt to reboot to complete uninstall. |
- uninstall_command.AppendSwitch(installer::switches::kForceUninstall); |
- VLOG(1) << "Uninstalling Chrome Frame with command: " |
- << uninstall_command.GetCommandLineString(); |
- base::LaunchProcess(uninstall_command, base::LaunchOptions(), NULL); |
-} |
- |
-void LaunchLearnMoreURL(UrlLauncher* url_launcher) { |
- url_launcher->LaunchUrl(SimpleResourceLoader::Get( |
- IDS_CHROME_FRAME_TURNDOWN_LEARN_MORE_URL)); |
-} |
- |
-void OnUninstallClicked(UrlLauncher* url_launcher) { |
- LaunchChromeFrameUninstaller(); |
- LaunchLearnMoreURL(url_launcher); |
-} |
- |
-} // namespace |
- |
-namespace turndown_prompt { |
- |
-bool IsPromptSuppressed() { |
- // See if this is an MSI install of GCF or if updates have been disabled. |
- BrowserDistribution* dist = |
- BrowserDistribution::GetSpecificDistribution( |
- BrowserDistribution::CHROME_FRAME); |
- |
- const bool system_level = IsCurrentModuleSystemLevel(); |
- bool multi_install = false; |
- |
- installer::ProductState product_state; |
- if (product_state.Initialize(system_level, dist)) { |
- if (product_state.is_msi()) |
- return true; |
- multi_install = product_state.is_multi_install(); |
- } |
- |
- if (multi_install) { |
- dist = |
- BrowserDistribution::GetSpecificDistribution( |
- BrowserDistribution::CHROME_BINARIES); |
- } |
- if (GoogleUpdateSettings::GetAppUpdatePolicy(dist->GetAppGuid(), NULL) == |
- GoogleUpdateSettings::UPDATES_DISABLED) { |
- return true; |
- } |
- |
- // See if the prompt is explicitly suppressed via GP. |
- return PolicySettings::GetInstance()->suppress_turndown_prompt(); |
-} |
- |
-void Configure(IWebBrowser2* web_browser) { |
- if (!IsPromptSuppressed()) |
- InstallPrompts(web_browser); |
-} |
- |
-} // namespace turndown_prompt |