summaryrefslogtreecommitdiffstats
path: root/chrome_frame
diff options
context:
space:
mode:
authorgrt@chromium.org <grt@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-12 18:22:37 +0000
committergrt@chromium.org <grt@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-12 18:22:37 +0000
commitadb8b22d8dd4e079645f000e009627ec18068de2 (patch)
treeb37115727f52fa66a5c3671768d53febbd39ebc9 /chrome_frame
parent3ae91a5a47721627154834818abfe0c9201a3e89 (diff)
downloadchromium_src-adb8b22d8dd4e079645f000e009627ec18068de2.zip
chromium_src-adb8b22d8dd4e079645f000e009627ec18068de2.tar.gz
chromium_src-adb8b22d8dd4e079645f000e009627ec18068de2.tar.bz2
Remove Chrome Frame ready-mode.
BUG=316496 TBR=jcivelli@chromium.org Review URL: https://codereview.chromium.org/110163004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@240363 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame')
-rw-r--r--chrome_frame/chrome_frame.gyp10
-rw-r--r--chrome_frame/ready_mode/internal/ready_mode_state.h23
-rw-r--r--chrome_frame/ready_mode/internal/ready_prompt_content.cc103
-rw-r--r--chrome_frame/ready_mode/internal/ready_prompt_content.h41
-rw-r--r--chrome_frame/ready_mode/internal/ready_prompt_window.cc124
-rw-r--r--chrome_frame/ready_mode/internal/ready_prompt_window.h106
-rw-r--r--chrome_frame/ready_mode/internal/registry_ready_mode_state.cc254
-rw-r--r--chrome_frame/ready_mode/internal/registry_ready_mode_state.h90
-rw-r--r--chrome_frame/ready_mode/ready_mode.cc400
-rw-r--r--chrome_frame/ready_mode/ready_mode.h41
-rw-r--r--chrome_frame/test/ready_mode_unittest.cc286
11 files changed, 0 insertions, 1478 deletions
diff --git a/chrome_frame/chrome_frame.gyp b/chrome_frame/chrome_frame.gyp
index 9b33acb..cd7d278 100644
--- a/chrome_frame/chrome_frame.gyp
+++ b/chrome_frame/chrome_frame.gyp
@@ -133,7 +133,6 @@
'test/http_negotiate_unittest.cc',
'test/infobar_unittests.cc',
'test/policy_settings_unittest.cc',
- 'test/ready_mode_unittest.cc',
'test/registry_watcher_unittest.cc',
'test/simulate_input.h',
'test/simulate_input.cc',
@@ -742,18 +741,9 @@
'policy_settings.h',
'protocol_sink_wrap.cc',
'protocol_sink_wrap.h',
- 'ready_mode/internal/ready_mode_state.h',
'ready_mode/internal/ready_mode_web_browser_adapter.cc',
'ready_mode/internal/ready_mode_web_browser_adapter.h',
- 'ready_mode/internal/ready_prompt_content.cc',
- 'ready_mode/internal/ready_prompt_content.h',
- 'ready_mode/internal/ready_prompt_window.cc',
- 'ready_mode/internal/ready_prompt_window.h',
- 'ready_mode/internal/registry_ready_mode_state.cc',
- 'ready_mode/internal/registry_ready_mode_state.h',
'ready_mode/internal/url_launcher.h',
- 'ready_mode/ready_mode.cc',
- 'ready_mode/ready_mode.h',
'register_bho.rgs',
'registry_list_preferences_holder.cc',
'registry_list_preferences_holder.h',
diff --git a/chrome_frame/ready_mode/internal/ready_mode_state.h b/chrome_frame/ready_mode/internal/ready_mode_state.h
deleted file mode 100644
index 625cb08..0000000
--- a/chrome_frame/ready_mode/internal/ready_mode_state.h
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2010 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.
-
-#ifndef CHROME_FRAME_READY_MODE_INTERNAL_READY_MODE_STATE_H_
-#define CHROME_FRAME_READY_MODE_INTERNAL_READY_MODE_STATE_H_
-
-// Allows the UI element to signal the user's response to a Ready Mode prompt.
-class ReadyModeState {
- public:
- virtual ~ReadyModeState() {}
-
- // Indicates that the user has temporarily declined the product.
- virtual void TemporarilyDeclineChromeFrame() = 0;
-
- // Indicates that the user has permanently declined the product.
- virtual void PermanentlyDeclineChromeFrame() = 0;
-
- // Indicates that the user has accepted the product.
- virtual void AcceptChromeFrame() = 0;
-}; // class ReadyModeState
-
-#endif // CHROME_FRAME_READY_MODE_INTERNAL_READY_MODE_STATE_H_
diff --git a/chrome_frame/ready_mode/internal/ready_prompt_content.cc b/chrome_frame/ready_mode/internal/ready_prompt_content.cc
deleted file mode 100644
index 52ab70f..0000000
--- a/chrome_frame/ready_mode/internal/ready_prompt_content.cc
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright (c) 2010 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/ready_mode/internal/ready_prompt_content.h"
-
-#include "base/logging.h"
-#include "chrome_frame/ready_mode/internal/ready_mode_state.h"
-#include "chrome_frame/ready_mode/internal/ready_prompt_window.h"
-#include "chrome_frame/ready_mode/internal/url_launcher.h"
-
-ReadyPromptContent::ReadyPromptContent(ReadyModeState* ready_mode_state,
- UrlLauncher* url_launcher)
- : ready_mode_state_(ready_mode_state),
- url_launcher_(url_launcher) {
-}
-
-ReadyPromptContent::~ReadyPromptContent() {
- if (window_ != NULL && window_->IsWindow()) {
- // The window must discard its ContentFrame pointer at this time.
- window_->DestroyWindow();
- window_.reset();
- }
-}
-
-bool ReadyPromptContent::InstallInFrame(Frame* frame) {
- DCHECK(window_ == NULL);
- DCHECK(ready_mode_state_ != NULL);
- DCHECK(url_launcher_ != NULL);
-
- // Pass ownership of our ready_mode_state_ and url_launcher_ to the window.
- window_ = ReadyPromptWindow::CreateInstance(
- frame, ready_mode_state_.release(), url_launcher_.release());
-
- return window_ != NULL;
-}
-
-void ReadyPromptContent::SetDimensions(const RECT& dimensions) {
- if (window_ != NULL && window_->IsWindow()) {
- window_->SetWindowPos(HWND_TOP, &dimensions,
- ::IsRectEmpty(&dimensions) ? SWP_HIDEWINDOW :
- SWP_SHOWWINDOW);
- }
-}
-
-bool GetDialogTemplateDimensions(ReadyPromptWindow* window, RECT* dimensions) {
- HRSRC resource = ::FindResource(_AtlBaseModule.GetResourceInstance(),
- MAKEINTRESOURCE(ReadyPromptWindow::IDD),
- RT_DIALOG);
-
- HGLOBAL handle = NULL;
- DLGTEMPLATE* dlgtemplate = NULL;
- _DialogSplitHelper::DLGTEMPLATEEX* dlgtemplateex = NULL;
-
- if (resource == NULL) {
- DPLOG(ERROR) << "Failed to find resource for ReadyPromptWindow::IDD";
- return false;
- }
-
- handle = ::LoadResource(_AtlBaseModule.GetResourceInstance(), resource);
-
- if (handle == NULL) {
- DPLOG(ERROR) << "Failed to load resource for ReadyPromptWindow::IDD";
- return false;
- }
-
- dlgtemplate = reinterpret_cast<DLGTEMPLATE*>(::LockResource(handle));
- if (dlgtemplate == NULL) {
- DPLOG(ERROR) << "Failed to lock resource for ReadyPromptWindow::IDD";
- return false;
- }
-
- if (!_DialogSplitHelper::IsDialogEx(dlgtemplate)) {
- DLOG(ERROR) << "Resource ReadyPromptWindow::IDD is not a DLGTEMPLATEEX";
- return false;
- }
-
- dlgtemplateex =
- reinterpret_cast<_DialogSplitHelper::DLGTEMPLATEEX*>(dlgtemplate);
-
- RECT dlgdimensions = {0, 0, dlgtemplateex->cx, dlgtemplateex->cy};
- if (!window->MapDialogRect(&dlgdimensions)) {
- DPLOG(ERROR) << "Failure in MapDialogRect";
- return false;
- }
-
- *dimensions = dlgdimensions;
- return true;
-}
-
-size_t ReadyPromptContent::GetDesiredSize(size_t width, size_t height) {
- DCHECK(window_ != NULL && window_->IsWindow());
-
- if (window_ == NULL || !window_->IsWindow()) {
- return 0;
- }
- RECT dialog_dimensions = {0, 0, 0, 0};
-
- if (GetDialogTemplateDimensions(window_.get(), &dialog_dimensions))
- return width == 0 ? dialog_dimensions.right : dialog_dimensions.bottom;
- else
- return width == 0 ? 0 : 39;
-}
diff --git a/chrome_frame/ready_mode/internal/ready_prompt_content.h b/chrome_frame/ready_mode/internal/ready_prompt_content.h
deleted file mode 100644
index 7593c6c..0000000
--- a/chrome_frame/ready_mode/internal/ready_prompt_content.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2011 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.
-
-#ifndef CHROME_FRAME_READY_MODE_INTERNAL_READY_PROMPT_CONTENT_H_
-#define CHROME_FRAME_READY_MODE_INTERNAL_READY_PROMPT_CONTENT_H_
-
-#include "base/basictypes.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "chrome_frame/infobars/infobar_content.h"
-
-class ReadyModeState;
-class ReadyPromptWindow;
-class UrlLauncher;
-
-// Encapsulates the Ready Mode prompt inviting users to permanently activate
-// Chrome Frame, temporarily disable Ready Mode, or permanently disable Ready
-// Mode.
-class ReadyPromptContent : public InfobarContent {
- public:
- // Takes ownership of the ReadyModeState and UrlLauncher instances, which
- // will be freed upon destruction of the ReadyPromptContent.
- ReadyPromptContent(ReadyModeState* ready_mode_state,
- UrlLauncher* url_launcher);
- virtual ~ReadyPromptContent();
-
- // InfobarContent implementation
- virtual bool InstallInFrame(Frame* frame);
- virtual void SetDimensions(const RECT& dimensions);
- virtual size_t GetDesiredSize(size_t width, size_t height);
-
- private:
- base::WeakPtr<ReadyPromptWindow> window_;
- scoped_ptr<ReadyModeState> ready_mode_state_;
- scoped_ptr<UrlLauncher> url_launcher_;
-
- DISALLOW_COPY_AND_ASSIGN(ReadyPromptContent);
-}; // class ReadyPromptContent
-
-#endif // CHROME_FRAME_READY_MODE_INTERNAL_READY_PROMPT_CONTENT_H_
diff --git a/chrome_frame/ready_mode/internal/ready_prompt_window.cc b/chrome_frame/ready_mode/internal/ready_prompt_window.cc
deleted file mode 100644
index 7cb13214..0000000
--- a/chrome_frame/ready_mode/internal/ready_prompt_window.cc
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright (c) 2010 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/ready_mode/internal/ready_prompt_window.h"
-
-#include <atlctrls.h>
-#include <Shellapi.h>
-
-#include "base/compiler_specific.h"
-#include "base/win/scoped_bstr.h"
-#include "base/win/scoped_comptr.h"
-#include "chrome_frame/ready_mode/internal/ready_mode_state.h"
-#include "chrome_frame/ready_mode/internal/url_launcher.h"
-#include "chrome_frame/simple_resource_loader.h"
-#include "grit/chrome_frame_dialogs.h"
-#include "grit/chromium_strings.h"
-
-// atlctrlx.h requires 'min' and 'max' macros, the definition of which conflicts
-// with STL headers. Hence we include them out of the order defined by style
-// guidelines. As a result you may not refer to std::min or std::max in this
-// file.
-#include <minmax.h> // NOLINT
-#include <atlctrlx.h> // NOLINT
-
-ReadyPromptWindow::ReadyPromptWindow(
- InfobarContent::Frame* frame, ReadyModeState* ready_mode_state,
- UrlLauncher* url_launcher)
- : frame_(frame),
- ready_mode_state_(ready_mode_state),
- url_launcher_(url_launcher),
- icon_(NULL),
- weak_ptr_factory_(this) {
-}
-ReadyPromptWindow::~ReadyPromptWindow() {
- if (icon_)
- ::DestroyIcon(icon_);
-}
-
-base::WeakPtr<ReadyPromptWindow> ReadyPromptWindow::CreateInstance(
- InfobarContent::Frame* frame, ReadyModeState* ready_mode_state,
- UrlLauncher* url_launcher) {
- DCHECK(frame != NULL);
- DCHECK(ready_mode_state != NULL);
- DCHECK(url_launcher != NULL);
-
- base::WeakPtr<ReadyPromptWindow> instance((new ReadyPromptWindow(
- frame, ready_mode_state, url_launcher))->weak_ptr_factory_.GetWeakPtr());
-
- DCHECK(!instance->IsWindow());
-
- if (instance->Create(frame->GetFrameWindow()) == NULL) {
- DPLOG(ERROR) << "Failed to create HWND for ReadyPromptWindow.";
- return base::WeakPtr<ReadyPromptWindow>();
- }
-
- // Subclass the "Learn more." text to make it behave like a link. Clicks are
- // routed to OnLearnMore().
- CWindow rte = instance->GetDlgItem(IDC_PROMPT_LINK);
- instance->link_.reset(new CHyperLink());
- instance->link_->SubclassWindow(rte);
- instance->link_->SetHyperLinkExtendedStyle(HLINK_NOTIFYBUTTON,
- HLINK_NOTIFYBUTTON);
-
- CStatic icon_control(instance->GetDlgItem(IDC_PROMPT_ICON));
-
- instance->icon_ = static_cast<HICON>(
- ::LoadImage(_AtlBaseModule.GetResourceInstance(),
- MAKEINTRESOURCE(IDI_CHROME_FRAME_ICON),
- IMAGE_ICON, 16, 16, 0));
-
- if (instance->icon_)
- icon_control.SetIcon(instance->icon_);
-
- return instance;
-}
-
-void ReadyPromptWindow::OnDestroy() {
- frame_ = NULL;
-}
-
-BOOL ReadyPromptWindow::OnInitDialog(CWindow wndFocus, LPARAM lInitParam) {
- DlgResize_Init(false); // false => 'no gripper'
- return TRUE;
-}
-
-LRESULT ReadyPromptWindow::OnYes(WORD /*wNotifyCode*/,
- WORD /*wID*/,
- HWND /*hWndCtl*/,
- BOOL& /*bHandled*/) {
- frame_->CloseInfobar();
- ready_mode_state_->AcceptChromeFrame();
- return 0;
-}
-
-LRESULT ReadyPromptWindow::OnRemindMeLater(WORD /*wNotifyCode*/,
- WORD /*wID*/,
- HWND /*hWndCtl*/,
- BOOL& /*bHandled*/) {
- frame_->CloseInfobar();
- ready_mode_state_->TemporarilyDeclineChromeFrame();
- return 0;
-}
-
-LRESULT ReadyPromptWindow::OnNo(WORD /*wNotifyCode*/,
- WORD /*wID*/,
- HWND /*hWndCtl*/,
- BOOL& /*bHandled*/) {
- frame_->CloseInfobar();
- ready_mode_state_->PermanentlyDeclineChromeFrame();
- return 0;
-}
-
-LRESULT ReadyPromptWindow::OnLearnMore(WORD /*wParam*/,
- LPNMHDR /*lParam*/,
- BOOL& /*bHandled*/) {
- url_launcher_->LaunchUrl(SimpleResourceLoader::Get(
- IDS_CHROME_FRAME_READY_MODE_LEARN_MORE_URL));
- return 0;
-}
-
-void ReadyPromptWindow::OnFinalMessage(HWND) {
- delete this;
-}
diff --git a/chrome_frame/ready_mode/internal/ready_prompt_window.h b/chrome_frame/ready_mode/internal/ready_prompt_window.h
deleted file mode 100644
index 1673371..0000000
--- a/chrome_frame/ready_mode/internal/ready_prompt_window.h
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright (c) 2011 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.
-
-#ifndef CHROME_FRAME_READY_MODE_INTERNAL_READY_PROMPT_WINDOW_H_
-#define CHROME_FRAME_READY_MODE_INTERNAL_READY_PROMPT_WINDOW_H_
-
-#include <atlbase.h>
-#include <atlapp.h>
-#include <atlcrack.h>
-#include <atlframe.h>
-#include <atlwin.h>
-
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "base/win/scoped_comptr.h"
-#include "chrome_frame/infobars/infobar_content.h"
-#include "chrome_frame/resource.h"
-#include "grit/chrome_frame_dialogs.h"
-
-class ReadyModeState;
-class UrlLauncher;
-
-namespace WTL {
-class CHyperLink;
-} // namespace WTL
-
-// Implements a dialog with text and buttons inviting the user to permanently
-// activate the product or temporarily/permanently disable Ready Mode.
-class ReadyPromptWindow
- : public CDialogImpl<ReadyPromptWindow, CWindow>,
- public CDialogResize<ReadyPromptWindow> {
- public:
- enum { IDD = IDD_CHROME_FRAME_READY_PROMPT };
-
- // Creates and initializes a dialog for display in the provided frame. The
- // ReadyModeState will be invoked to capture the user's response, if any.
- // The UrlLauncher may be used to launch a new tab containing a
- // knowledge-base article about Ready Mode.
- //
- // Upon success, takes ownership of itself (to be deleted upon WM_DESTROY) and
- // returns a weak pointer to this dialog. Upon failure, returns a null weak
- // pointer and deletes self.
- //
- // In either case, takes ownership of the ReadyModeState and UrlLauncher, but
- // not the frame.
- static base::WeakPtr<ReadyPromptWindow> CreateInstance(
- InfobarContent::Frame* frame,
- ReadyModeState* ready_mode_state,
- UrlLauncher* url_launcher);
-
- BEGIN_MSG_MAP(InfobarWindow)
- MSG_WM_INITDIALOG(OnInitDialog)
- MSG_WM_DESTROY(OnDestroy)
- NOTIFY_HANDLER(IDC_PROMPT_LINK, NM_CLICK, OnLearnMore)
- COMMAND_HANDLER(IDACTIVATE, BN_CLICKED, OnYes)
- COMMAND_HANDLER(IDNEVER, BN_CLICKED, OnNo)
- CHAIN_MSG_MAP(CDialogResize<ReadyPromptWindow>)
- END_MSG_MAP()
-
- BEGIN_DLGRESIZE_MAP(InfobarWindow)
- DLGRESIZE_CONTROL(IDACTIVATE, DLSZ_CENTER_Y | DLSZ_MOVE_X)
- DLGRESIZE_CONTROL(IDNEVER, DLSZ_CENTER_Y | DLSZ_MOVE_X)
- DLGRESIZE_CONTROL(IDC_PROMPT_MESSAGE, DLSZ_SIZE_Y | DLSZ_SIZE_X)
- DLGRESIZE_CONTROL(IDC_PROMPT_LINK, DLSZ_CENTER_Y | DLSZ_MOVE_X)
- END_DLGRESIZE_MAP()
-
- virtual void OnFinalMessage(HWND);
-
- private:
- // Call CreateInstance() to get an initialized ReadyPromptWindow.
- ReadyPromptWindow(InfobarContent::Frame* frame,
- ReadyModeState* ready_mode_state,
- UrlLauncher* url_launcher);
-
- // The ReadyPromptWindow manages its own destruction.
- virtual ~ReadyPromptWindow();
-
- // Event handlers.
- void OnDestroy();
- BOOL OnInitDialog(CWindow wndFocus, LPARAM lInitParam);
- LRESULT OnYes(WORD wNotifyCode,
- WORD wID,
- HWND hWndCtl,
- BOOL& bHandled);
- LRESULT OnRemindMeLater(WORD wNotifyCode,
- WORD wID,
- HWND hWndCtl,
- BOOL& bHandled);
- LRESULT OnLearnMore(WORD wParam, LPNMHDR lParam, BOOL& bHandled); // NOLINT
- LRESULT OnNo(WORD wNotifyCode,
- WORD wID,
- HWND hWndCtl,
- BOOL& bHandled);
-
- InfobarContent::Frame* frame_; // Not owned by this instance
- scoped_ptr<ReadyModeState> ready_mode_state_;
- scoped_ptr<WTL::CHyperLink> link_;
- scoped_ptr<UrlLauncher> url_launcher_;
-
- HICON icon_;
- base::WeakPtrFactory<ReadyPromptWindow> weak_ptr_factory_;
- DISALLOW_COPY_AND_ASSIGN(ReadyPromptWindow);
-}; // class ReadyPromptWindow
-
-#endif // CHROME_FRAME_READY_MODE_INTERNAL_READY_PROMPT_WINDOW_H_
diff --git a/chrome_frame/ready_mode/internal/registry_ready_mode_state.cc b/chrome_frame/ready_mode/internal/registry_ready_mode_state.cc
deleted file mode 100644
index bb1dedc..0000000
--- a/chrome_frame/ready_mode/internal/registry_ready_mode_state.cc
+++ /dev/null
@@ -1,254 +0,0 @@
-// Copyright (c) 2011 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/ready_mode/internal/registry_ready_mode_state.h"
-
-#include <windows.h>
-
-#include "base/logging.h"
-#include "base/process/launch.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "base/time/time.h"
-#include "base/win/registry.h"
-#include "base/win/scoped_comptr.h"
-#include "base/win/scoped_handle.h"
-#include "base/win/windows_version.h"
-#include "chrome/installer/util/browser_distribution.h"
-#include "chrome/installer/util/google_update_constants.h"
-#include "chrome/installer/util/master_preferences.h"
-#include "chrome/installer/util/util_constants.h"
-#include "chrome_frame/chrome_launcher_utils.h"
-#include "chrome_frame/ready_mode/ready_mode.h"
-
-namespace {
-
-// Looks up a command entry in the registry and attempts to execute it directly.
-// Returns the new process handle, which the caller is responsible for closing,
-// or NULL upon failure.
-HANDLE LaunchCommandDirectly(const std::wstring& command_field) {
- BrowserDistribution* dist = BrowserDistribution::GetDistribution();
- std::wstring version_key_name(dist->GetVersionKey());
-
- HKEY roots[] = {HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE};
-
- for (int i = 0; i < arraysize(roots); i++) {
- base::win::RegKey version_key;
- if (version_key.Open(roots[i], version_key_name.c_str(),
- KEY_QUERY_VALUE) == ERROR_SUCCESS) {
- std::wstring command_line;
- if (version_key.ReadValue(command_field.c_str(),
- &command_line) == ERROR_SUCCESS) {
- base::win::ScopedHandle launched_process;
- base::LaunchOptions options;
- options.start_hidden = true;
- if (base::LaunchProcess(command_line, options, &launched_process)) {
- return launched_process.Take();
- }
- }
- }
- }
- return NULL;
-}
-
-// Attempts to launch a command using the ProcessLauncher. Returns a handle to
-// the launched process, which the caller is responsible for closing, or NULL
-// upon failure.
-HANDLE LaunchCommandViaProcessLauncher(const std::wstring& command_field) {
- HANDLE launched_process = NULL;
-
- scoped_ptr<CommandLine> command_line;
- if (chrome_launcher::CreateUpdateCommandLine(command_field, &command_line)) {
- DCHECK(command_line != NULL);
- base::LaunchOptions options;
- options.start_hidden = true;
- base::LaunchProcess(*command_line, options, &launched_process);
- }
-
- return launched_process;
-}
-
-// Waits for the provided process to exit, and verifies that its exit code
-// corresponds to one of the known "success" codes for the installer. If the
-// exit code cannot be retrieved, or if it signals failure, returns false.
-bool CheckProcessExitCode(HANDLE handle) {
- // TODO(erikwright): Use RegisterWaitForSingleObject to wait
- // asynchronously.
- DWORD wait_result = WaitForSingleObject(handle, 5000); // (ms)
-
- if (wait_result == WAIT_OBJECT_0) {
- DWORD exit_code = 0;
- if (!::GetExitCodeProcess(handle, &exit_code)) {
- DPLOG(ERROR) << "GetExitCodeProcess failed.";
- return false;
- }
-
- // These are the only two success codes returned by the installer.
- // All other codes are errors.
- if (exit_code != 0 && exit_code != installer::UNINSTALL_REQUIRES_REBOOT) {
- DLOG(ERROR) << "Process failed with exit code " << exit_code << ".";
- return false;
- }
-
- return true;
- }
-
- if (wait_result == WAIT_FAILED)
- DPLOG(ERROR) << "Error while waiting for elevated child process.";
-
- if (wait_result == WAIT_ABANDONED)
- DLOG(ERROR) << "Unexpeced WAIT_ABANDONED while waiting on child process.";
-
- if (wait_result == WAIT_TIMEOUT)
- DLOG(ERROR) << "Timeout while waiting on child process.";
-
- return false;
-}
-
-// If we are running on XP (no protected mode) or in a high-integrity process,
-// we can invoke the installer directly. If not, we will have to go via the
-// ProcessLauncher.
-bool CanLaunchDirectly() {
- if (base::win::GetVersion() < base::win::VERSION_VISTA)
- return true;
-
- base::IntegrityLevel integrity_level = base::INTEGRITY_UNKNOWN;
- if (!base::GetProcessIntegrityLevel(base::GetCurrentProcessHandle(),
- &integrity_level)) {
- DLOG(ERROR) << "Failed to determine process integrity level.";
- return false;
- }
-
- return integrity_level == base::HIGH_INTEGRITY;
-}
-
-// Attempts to launch the specified command either directly or via the
-// ProcessLauncher. Returns true if the command is launched and returns a
-// success code.
-bool LaunchAndCheckCommand(const std::wstring& command_field) {
- base::win::ScopedHandle handle;
-
- if (CanLaunchDirectly())
- handle.Set(LaunchCommandDirectly(command_field));
- else
- handle.Set(LaunchCommandViaProcessLauncher(command_field));
-
- if (handle.IsValid() && CheckProcessExitCode(handle))
- return true;
-
- DLOG(ERROR) << "Command " << command_field << " could not be launched.";
- return false;
-}
-
-} // namespace
-
-RegistryReadyModeState::RegistryReadyModeState(
- const std::wstring& key_name, base::TimeDelta temporary_decline_duration,
- Observer* observer)
- : key_name_(key_name),
- temporary_decline_duration_(temporary_decline_duration),
- observer_(observer) {
-}
-
-RegistryReadyModeState::~RegistryReadyModeState() {
-}
-
-base::Time RegistryReadyModeState::GetNow() {
- return base::Time::Now();
-}
-
-ReadyModeStatus RegistryReadyModeState::GetStatus() {
- bool exists = false;
- int64 value = 0;
-
- if (!GetStateFromRegistry(&value, &exists))
- return READY_MODE_ACTIVE;
-
- if (!exists)
- return READY_MODE_ACCEPTED;
-
- if (value == 0)
- return READY_MODE_PERMANENTLY_DECLINED;
-
- if (value == 1)
- return READY_MODE_ACTIVE;
-
- base::Time when_declined(base::Time::FromInternalValue(value));
- base::Time now(GetNow());
-
- // If the decline duration has passed, or is further in the future than
- // the total timeout, consider it expired.
- bool expired = (now - when_declined) > temporary_decline_duration_ ||
- (when_declined - now) > temporary_decline_duration_;
-
- if (expired)
- return READY_MODE_TEMPORARY_DECLINE_EXPIRED;
- else
- return READY_MODE_TEMPORARILY_DECLINED;
-}
-
-void RegistryReadyModeState::NotifyObserver() {
- if (observer_ != NULL)
- observer_->OnStateChange(GetStatus());
-}
-
-bool RegistryReadyModeState::GetStateFromRegistry(int64* value, bool* exists) {
- *exists = false;
- *value = 0;
-
- HKEY roots[] = { HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE };
- LONG result = ERROR_SUCCESS;
- for (int i = 0; i < arraysize(roots); i++) {
- base::win::RegKey config_key;
- result = config_key.Open(roots[i], key_name_.c_str(), KEY_QUERY_VALUE);
- if (result == ERROR_SUCCESS) {
- result = config_key.ReadInt64(installer::kChromeFrameReadyModeField,
- value);
- if (result == ERROR_SUCCESS) {
- *exists = true;
- return true;
- }
- if (result != ERROR_FILE_NOT_FOUND) {
- DLOG(ERROR) << "Failed to read from registry key " << key_name_
- << " and value " << installer::kChromeFrameReadyModeField
- << " error: " << result;
- return false;
- }
- }
- }
-
- return true;
-}
-
-void RegistryReadyModeState::RefreshStateAndNotify() {
- HRESULT hr = UrlMkSetSessionOption(URLMON_OPTION_USERAGENT_REFRESH,
- NULL, 0, 0);
- if (FAILED(hr)) {
- DLOG(ERROR) << "Failed to refresh user agent string from registry. "
- << "UrlMkSetSessionOption returned "
- << base::StringPrintf("0x%08x", hr);
- } else {
- NotifyObserver();
- }
-}
-
-void RegistryReadyModeState::ExpireTemporaryDecline() {
- if (LaunchAndCheckCommand(google_update::kRegCFEndTempOptOutCmdField))
- RefreshStateAndNotify();
-}
-
-void RegistryReadyModeState::TemporarilyDeclineChromeFrame() {
- if (LaunchAndCheckCommand(google_update::kRegCFTempOptOutCmdField))
- RefreshStateAndNotify();
-}
-
-void RegistryReadyModeState::PermanentlyDeclineChromeFrame() {
- if (LaunchAndCheckCommand(google_update::kRegCFOptOutCmdField))
- RefreshStateAndNotify();
-}
-
-void RegistryReadyModeState::AcceptChromeFrame() {
- if (LaunchAndCheckCommand(google_update::kRegCFOptInCmdField))
- NotifyObserver();
-}
diff --git a/chrome_frame/ready_mode/internal/registry_ready_mode_state.h b/chrome_frame/ready_mode/internal/registry_ready_mode_state.h
deleted file mode 100644
index a125b68..0000000
--- a/chrome_frame/ready_mode/internal/registry_ready_mode_state.h
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright (c) 2011 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.
-
-#ifndef CHROME_FRAME_READY_MODE_INTERNAL_REGISTRY_READY_MODE_STATE_H_
-#define CHROME_FRAME_READY_MODE_INTERNAL_REGISTRY_READY_MODE_STATE_H_
-
-#include <string>
-
-#include "base/basictypes.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/time/time.h"
-#include "chrome_frame/ready_mode/internal/ready_mode_state.h"
-
-// Defines the possible Ready Mode states.
-enum ReadyModeStatus {
- // Chrome Frame is permanently disabled and should be uninstalled.
- READY_MODE_PERMANENTLY_DECLINED,
- // Chrome Frame is temporarily disabled.
- READY_MODE_TEMPORARILY_DECLINED,
- // Chrome Frame is disabled, but should be enabled by calling
- // ExpireTemporaryDecline().
- READY_MODE_TEMPORARY_DECLINE_EXPIRED,
- // Chrome Frame is enabled, but not permanently (the user should be prompted).
- READY_MODE_ACTIVE,
- // Chrome Frame is permanently enabled.
- READY_MODE_ACCEPTED
-};
-
-// Implements ReadyModeState, reading state from the Registry and delegating
-// to the installer to effect state changes.
-//
-// If the current process is running at high integrity the installer is
-// launched directly. Otherwise, it is launched by invoking a helper exe
-// (chrome_launcher) at medium integrity (thanks to an elevation policy) that,
-// in turn, delegates to Omaha's ProcessLauncher to reach high integrity.
-class RegistryReadyModeState : public ReadyModeState {
- public:
- // Receives notification when the Ready Mode state changes in response to a
- // user interaction. Does not receive notification when a temporary decline of
- // Ready Mode expires.
- class Observer {
- public:
- virtual ~Observer() {}
- // Indicates that a state change has occurred, passing the new status.
- virtual void OnStateChange(ReadyModeStatus status) = 0;
- };
-
- // Constructs an instance backed by the specified key (pre-existing under
- // HKCU or HKLM). The provided duration indicates how long, after a temporary
- // decline, Ready Mode re-activates.
- //
- // Takes ownership of the Observer instance, which may be null if the client
- // does not need to be notified of changes.
- RegistryReadyModeState(const std::wstring& key_name,
- base::TimeDelta temporary_decline_duration,
- Observer* observer);
- virtual ~RegistryReadyModeState();
-
- // Returns the current Ready Mode status.
- ReadyModeStatus GetStatus();
-
- // Transitions from temporarily declined to active Ready Mode.
- void ExpireTemporaryDecline();
-
- // ReadyModeState implementation
- virtual void TemporarilyDeclineChromeFrame();
- virtual void PermanentlyDeclineChromeFrame();
- virtual void AcceptChromeFrame();
-
- protected:
- // Allows dependency replacement via derivation for tests.
- virtual base::Time GetNow();
-
- private:
- // Sends the result of GetStatus() to our observer.
- void NotifyObserver();
- // Retrieves state from the registry. Returns true upon success.
- bool GetStateFromRegistry(int64* value, bool* exists);
- // Refreshes the process state after mutating installation state.
- void RefreshStateAndNotify();
-
- base::TimeDelta temporary_decline_duration_;
- std::wstring key_name_;
- scoped_ptr<Observer> observer_;
-
- DISALLOW_COPY_AND_ASSIGN(RegistryReadyModeState);
-};
-
-#endif // CHROME_FRAME_READY_MODE_INTERNAL_REGISTRY_READY_MODE_STATE_H_
diff --git a/chrome_frame/ready_mode/ready_mode.cc b/chrome_frame/ready_mode/ready_mode.cc
deleted file mode 100644
index 1285329..0000000
--- a/chrome_frame/ready_mode/ready_mode.cc
+++ /dev/null
@@ -1,400 +0,0 @@
-// Copyright (c) 2012 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/ready_mode/ready_mode.h"
-
-#include <atlbase.h>
-#include <shlguid.h>
-
-#include "base/compiler_specific.h"
-#include "base/logging.h"
-#include "base/memory/linked_ptr.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.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 "net/base/registry_controlled_domains/registry_controlled_domain.h"
-#include "chrome_frame/infobars/infobar_manager.h"
-#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 {
-
-// Temporarily disable Ready Mode for 36 hours when the user so indicates.
-const int kTemporaryDeclineDurationMinutes = 60 * 36;
-
-class BrowserObserver;
-
-// A helper for BrowserObserver to observe the user's choice in the Ready Mode
-// prompt.
-class StateObserver : public RegistryReadyModeState::Observer {
- public:
- explicit StateObserver(const base::WeakPtr<BrowserObserver>& ready_mode_ui);
- ~StateObserver();
-
- // RegistryReadyModeState::Observer implementation
- virtual void OnStateChange(ReadyModeStatus status);
-
- private:
- base::WeakPtr<BrowserObserver> ready_mode_ui_;
-
- DISALLOW_COPY_AND_ASSIGN(StateObserver);
-}; // class StateObserver
-
-// Manages the Ready Mode UI in response to browsing ChromeFrame- or Host-
-// rendered pages. Shows the Ready Mode prompt when the user browses to a GCF-
-// enabled page. Hides the prompt when the user begins navigating to a new
-// domain or when they navigate to a new page in the same domain that is not
-// GCF enabled.
-//
-// Uses InstallerAdapter and RegistryReadyMode to query and update the
-// installation state. Uninstalls the ReadyModeWebBrowserAdapter when the user
-// temporarily or permanently exits Ready Mode (decline or accept Chrome Frame).
-// If the user declines Chrome Frame, the current page is reloaded in the Host
-// renderer.
-class BrowserObserver : public ReadyModeWebBrowserAdapter::Observer {
- public:
- BrowserObserver(ready_mode::Delegate* chrome_frame,
- IWebBrowser2* web_browser,
- ReadyModeWebBrowserAdapter* adapter);
-
- // ReadyModeWebBrowserAdapter::Observer implementation
- virtual void OnNavigateTo(const std::wstring& url);
- virtual void OnRenderInChromeFrame(const std::wstring& url);
- virtual void OnRenderInHost(const std::wstring& url);
-
- private:
- friend class StateObserver;
-
- // Called by the StateObserver
- void OnReadyModeDisabled();
- void OnReadyModeAccepted();
-
- // Helpers for showing infobar prompts
- void ShowPrompt();
- void Hide();
- InfobarManager* GetInfobarManager();
-
- GURL rendered_url_;
- linked_ptr<ready_mode::Delegate> chrome_frame_;
- base::win::ScopedComPtr<IWebBrowser2> web_browser_;
- // The adapter owns us, so we use a weak reference
- ReadyModeWebBrowserAdapter* adapter_;
- base::WeakPtrFactory<BrowserObserver> weak_ptr_factory_;
-
- 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) {
-}
-
-StateObserver::~StateObserver() {
-}
-
-void StateObserver::OnStateChange(ReadyModeStatus status) {
- if (ready_mode_ui_ == NULL)
- return;
-
- switch (status) {
- case READY_MODE_PERMANENTLY_DECLINED:
- case READY_MODE_TEMPORARILY_DECLINED:
- ready_mode_ui_->OnReadyModeDisabled();
- break;
-
- case READY_MODE_ACCEPTED:
- ready_mode_ui_->OnReadyModeAccepted();
- break;
-
- case READY_MODE_ACTIVE:
- break;
-
- default:
- NOTREACHED();
- break;
- }
-}
-
-BrowserObserver::BrowserObserver(ready_mode::Delegate* chrome_frame,
- IWebBrowser2* web_browser,
- ReadyModeWebBrowserAdapter* adapter)
- : web_browser_(web_browser),
- chrome_frame_(chrome_frame),
- adapter_(adapter),
- weak_ptr_factory_(this) {
-}
-
-void BrowserObserver::OnNavigateTo(const std::wstring& 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 std::wstring& url) {
- ShowPrompt();
- rendered_url_ = GURL(url);
-}
-
-void BrowserObserver::OnRenderInHost(const std::wstring& url) {
- Hide();
- rendered_url_ = GURL(url);
-}
-
-void BrowserObserver::OnReadyModeDisabled() {
- // We don't hold a reference to the adapter, since it owns us (in order to
- // break circular dependency). But we should still AddRef it before
- // invocation.
- base::win::ScopedComPtr<ReadyModeWebBrowserAdapter, NULL> reference(adapter_);
-
- // adapter_->Uninitialize may delete us, so we should not refer to members
- // after that point.
- base::win::ScopedComPtr<IWebBrowser2> web_browser(web_browser_);
-
- chrome_frame_->DisableChromeFrame();
- adapter_->Uninitialize();
-
- VARIANT flags = { VT_I4 };
- V_I4(&flags) = navNoHistory;
- base::win::ScopedBstr location;
-
- HRESULT hr = web_browser->get_LocationURL(location.Receive());
- DLOG_IF(ERROR, FAILED(hr)) << "Failed to get current location from "
- << "IWebBrowser2. Error: " << hr;
-
- if (SUCCEEDED(hr)) {
- hr = web_browser->Navigate(location, &flags, NULL, NULL, NULL);
- DLOG_IF(ERROR, FAILED(hr)) << "Failed to invoke Navigate on IWebBrowser2. "
- << "Error: " << hr;
- }
-}
-
-void BrowserObserver::OnReadyModeAccepted() {
- // See comment in OnReadyModeDisabled.
- base::win::ScopedComPtr<ReadyModeWebBrowserAdapter, NULL> reference(adapter_);
- adapter_->Uninitialize();
-}
-
-void BrowserObserver::ShowPrompt() {
- // This pointer is self-managed and not guaranteed to survive handling of
- // Windows events.
- InfobarManager* infobar_manager = GetInfobarManager();
-
- if (infobar_manager) {
- // Owned by ready_mode_state
- scoped_ptr<RegistryReadyModeState::Observer> ready_mode_state_observer(
- new StateObserver(weak_ptr_factory_.GetWeakPtr()));
-
- BrowserDistribution* dist =
- BrowserDistribution::GetSpecificDistribution(
- BrowserDistribution::CHROME_BINARIES);
-
- // Owned by infobar_content
- scoped_ptr<ReadyModeState> ready_mode_state(new RegistryReadyModeState(
- dist->GetStateKey(),
- 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(), url_launcher.release()));
-
- 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_browserhwnd = NULL;
- hr = ole_window->GetWindow(&web_browserhwnd);
- if (FAILED(hr) || web_browserhwnd == NULL) {
- DLOG(ERROR) << "Failed to query HWND from IOleWindow. "
- << "Error: " << hr;
- return NULL;
- }
-
- return InfobarManager::Get(web_browserhwnd);
-}
-
-// Wraps an existing Delegate so that ownership may be shared.
-class DelegateWrapper : public ready_mode::Delegate {
- public:
- explicit DelegateWrapper(linked_ptr<ready_mode::Delegate> wrapped);
-
- // ready_mode::Delegate implementation
- virtual void DisableChromeFrame();
-
- private:
- linked_ptr<ready_mode::Delegate> wrapped_;
-
- DISALLOW_COPY_AND_ASSIGN(DelegateWrapper);
-}; // class DelegateWrapper
-
-DelegateWrapper::DelegateWrapper(linked_ptr<ready_mode::Delegate> wrapped)
- : wrapped_(wrapped) {
-}
-
-void DelegateWrapper::DisableChromeFrame() {
- wrapped_->DisableChromeFrame();
-}
-
-// Attempts to create a ReadyModeWebBrowserAdapter instance.
-bool CreateWebBrowserAdapter(ReadyModeWebBrowserAdapter** pointer) {
- *pointer = 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();
- *pointer = com_object;
- return true;
-}
-
-// Attempts to install Ready Mode prompts in the provided web browser. Will
-// notify the provided Delegate if the user declines Chrome Frame temporarily or
-// permanently.
-bool InstallPrompts(linked_ptr<ready_mode::Delegate> delegate,
- IWebBrowser2* web_browser) {
- base::win::ScopedComPtr<ReadyModeWebBrowserAdapter, NULL> adapter;
-
- if (!CreateWebBrowserAdapter(adapter.Receive()))
- return false;
-
- // Wrap the original delegate so that we can share it with the
- // ReadyModeWebBrowserAdapter
- scoped_ptr<DelegateWrapper> delegate_wrapper(new DelegateWrapper(delegate));
-
- // Pass ownership of our delegate to the BrowserObserver
- scoped_ptr<ReadyModeWebBrowserAdapter::Observer> browser_observer(
- new BrowserObserver(delegate_wrapper.release(), web_browser, adapter));
-
- // Owns the BrowserObserver
- return adapter->Initialize(web_browser, browser_observer.release());
-}
-
-// Checks if the provided status implies disabling Chrome Frame functionality.
-bool ShouldDisableChromeFrame(ReadyModeStatus status) {
- switch (status) {
- case READY_MODE_PERMANENTLY_DECLINED:
- case READY_MODE_TEMPORARILY_DECLINED:
- case READY_MODE_TEMPORARY_DECLINE_EXPIRED:
- return true;
-
- case READY_MODE_ACCEPTED:
- case READY_MODE_ACTIVE:
- return false;
-
- default:
- NOTREACHED();
- return true;
- }
-}
-
-} // namespace
-
-namespace ready_mode {
-
-// Determines the current Ready Mode state. If it is active, attempts to set up
-// prompting. If we cannot set up prompting, attempts to temporarily disable
-// Ready Mode. In the end, if Ready Mode is disabled, pass that information on
-// to the Delegate, so that it may disabled Chrome Frame functionality.
-void Configure(Delegate* chrome_frame, IWebBrowser2* web_browser) {
- // Take ownership of the delegate
- linked_ptr<Delegate> delegate(chrome_frame);
- chrome_frame = NULL;
- BrowserDistribution* dist =
- BrowserDistribution::GetSpecificDistribution(
- BrowserDistribution::CHROME_BINARIES);
-
- RegistryReadyModeState ready_mode_state(
- dist->GetStateKey(),
- base::TimeDelta::FromMinutes(kTemporaryDeclineDurationMinutes),
- NULL); // NULL => no observer required
-
- ReadyModeStatus status = ready_mode_state.GetStatus();
-
- // If the user temporarily declined Chrome Frame, but the timeout has elapsed,
- // attempt to revert to active Ready Mode state.
- if (status == READY_MODE_TEMPORARY_DECLINE_EXPIRED) {
- ready_mode_state.ExpireTemporaryDecline();
- status = ready_mode_state.GetStatus();
- }
-
- // If Ready Mode is active, attempt to set up prompting.
- if (status == READY_MODE_ACTIVE) {
- if (!InstallPrompts(delegate, web_browser)) {
- // Failed to set up prompting. Turn off Ready Mode for now.
- ready_mode_state.TemporarilyDeclineChromeFrame();
- status = ready_mode_state.GetStatus();
- }
- }
-
- // Depending on the state we finally end up in, tell our Delegate to disable
- // Chrome Frame functionality.
- if (ShouldDisableChromeFrame(status))
- delegate->DisableChromeFrame();
-}
-
-} // namespace ready_mode
diff --git a/chrome_frame/ready_mode/ready_mode.h b/chrome_frame/ready_mode/ready_mode.h
deleted file mode 100644
index 007beeb..0000000
--- a/chrome_frame/ready_mode/ready_mode.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2011 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.
-
-#ifndef CHROME_FRAME_READY_MODE_READY_MODE_H_
-#define CHROME_FRAME_READY_MODE_READY_MODE_H_
-
-#include <atlbase.h>
-#include <atlcom.h>
-
-#include "base/basictypes.h"
-
-interface IWebBrowser2;
-
-// Integrates Ready Mode functionality with a specified IWebBrowser2 instance.
-// Displays prompts allowing the user to permanently activate, permanently
-// disable, or temporarily disable Chrome Frame whenever a Chrome Frame-enabled
-// site is rendered in the browser.
-namespace ready_mode {
-
-// Defines an interface for disabling Chrome Frame based on user interaction
-// with Ready Mode.
-class Delegate {
- public:
- virtual ~Delegate() {}
-
- // Disables Chrome Frame functionality in the current process. Will be
- // called after the installer has been invoked to manipulate the system or
- // user-level state.
- virtual void DisableChromeFrame() = 0;
-}; // class Delegate
-
-// Enables Ready Mode for the specified IWebBrowser2 instance, if Chrome Frame
-// is currently in Ready Mode. If Chrome Frame is temporarily or permanently
-// declined, will invoke chrome_frame->DisableChromeFrame() to synchronize the
-// process state with the system- / user-level state.
-void Configure(Delegate* chrome_frame, IWebBrowser2* web_browser);
-
-}; // namespace ready_mode
-
-#endif // CHROME_FRAME_READY_MODE_READY_MODE_H_
diff --git a/chrome_frame/test/ready_mode_unittest.cc b/chrome_frame/test/ready_mode_unittest.cc
deleted file mode 100644
index 6a508a2..0000000
--- a/chrome_frame/test/ready_mode_unittest.cc
+++ /dev/null
@@ -1,286 +0,0 @@
-// Copyright (c) 2012 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 <atlbase.h>
-#include <atlapp.h>
-#include <atlmisc.h>
-#include <atlwin.h>
-
-#include "testing/gtest/include/gtest/gtest.h"
-#include "testing/gmock/include/gmock/gmock.h"
-
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/win/registry.h"
-#include "chrome_frame/infobars/infobar_content.h"
-#include "chrome_frame/ready_mode/internal/ready_mode_state.h"
-#include "chrome_frame/ready_mode/internal/ready_prompt_content.h"
-#include "chrome_frame/ready_mode/internal/ready_prompt_window.h"
-#include "chrome_frame/ready_mode/internal/registry_ready_mode_state.h"
-#include "chrome_frame/ready_mode/internal/url_launcher.h"
-#include "chrome_frame/simple_resource_loader.h"
-#include "chrome_frame/test/chrome_frame_test_utils.h"
-
-namespace {
-
-class SetResourceInstance {
- public:
- SetResourceInstance() : res_dll_(NULL), old_res_dll_(NULL) {
- SimpleResourceLoader* loader_instance = SimpleResourceLoader::GetInstance();
- EXPECT_TRUE(loader_instance != NULL);
- if (loader_instance != NULL) {
- res_dll_ = loader_instance->GetResourceModuleHandle();
- EXPECT_TRUE(res_dll_ != NULL);
- if (res_dll_ != NULL) {
- old_res_dll_ = ATL::_AtlBaseModule.SetResourceInstance(res_dll_);
- }
- }
- }
-
- ~SetResourceInstance() {
- if (old_res_dll_ != NULL) {
- CHECK_EQ(res_dll_, ATL::_AtlBaseModule.SetResourceInstance(old_res_dll_));
- }
- }
-
- private:
- HMODULE res_dll_;
- HMODULE old_res_dll_;
-}; // class SetResourceInstance
-
-class SimpleWindow : public CWindowImpl<SimpleWindow,
- CWindow,
- CFrameWinTraits> {
- public:
- virtual ~SimpleWindow() {
- if (IsWindow())
- DestroyWindow();
- }
-
- static BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM l_param) {
- HWND* out = reinterpret_cast<HWND*>(l_param);
- EXPECT_TRUE(out != NULL);
-
- if (out == NULL)
- return FALSE;
-
- EXPECT_TRUE(*out == NULL || ::IsChild(*out, hwnd));
-
- if (*out == NULL)
- *out = hwnd;
-
- return TRUE;
- }
-
- HWND GetZeroOrOneChildWindows() {
- HWND child = NULL;
- EnumChildWindows(m_hWnd, EnumChildProc, reinterpret_cast<LPARAM>(&child));
- return child;
- }
-
- BEGIN_MSG_MAP(SimpleWindow)
- END_MSG_MAP()
-}; // class SimpleWindow
-
-class MockInfobarContentFrame : public InfobarContent::Frame {
- public:
- // InfobarContent::Frame implementation
- MOCK_METHOD0(GetFrameWindow, HWND(void));
- MOCK_METHOD0(CloseInfobar, void(void));
-}; // class Frame
-
-class MockReadyModeState : public ReadyModeState {
- public:
- // ReadyModeState implementation
- MOCK_METHOD0(TemporarilyDeclineChromeFrame, void(void));
- MOCK_METHOD0(PermanentlyDeclineChromeFrame, void(void));
- MOCK_METHOD0(AcceptChromeFrame, void(void));
-}; // class MockReadyModeState
-
-class MockUrlLauncher : public UrlLauncher {
- public:
- // UrlLauncher implementation
- MOCK_METHOD1(LaunchUrl, void(const std::wstring& url));
-}; // class MockUrlLauncher
-
-} // namespace
-
-class ReadyPromptTest : public testing::Test {
- public:
- ReadyPromptTest() : hwnd_(NULL) {}
-
- void SetUp() {
- hwnd_ = window_.Create(NULL);
- EXPECT_TRUE(hwnd_ != NULL);
- window_.ShowWindow(SW_SHOW);
- EXPECT_TRUE(window_.IsWindowVisible());
- EXPECT_CALL(frame_, GetFrameWindow()).Times(testing::AnyNumber())
- .WillRepeatedly(testing::Return(hwnd_));
- }
-
- protected:
- SimpleWindow window_;
- HWND hwnd_;
- MockInfobarContentFrame frame_;
- SetResourceInstance set_resource_instance_;
-}; // class ReadyPromptTest
-
-class ReadyPromptWindowTest : public ReadyPromptTest {
- public:
- void SetUp() {
- ReadyPromptTest::SetUp();
-
- // owned by ReadyPromptWindow
- state_ = new MockReadyModeState();
- url_launcher_ = new MockUrlLauncher();
-
- ready_prompt_window_ = ReadyPromptWindow::CreateInstance(
- &frame_, state_, url_launcher_);
-
- ASSERT_TRUE(ready_prompt_window_ != NULL);
- RECT position = {0, 0, 800, 39};
- ASSERT_TRUE(ready_prompt_window_->SetWindowPos(HWND_TOP, &position,
- SWP_SHOWWINDOW));
- }
-
- protected:
- MockReadyModeState* state_;
- MockUrlLauncher* url_launcher_;
- base::WeakPtr<ReadyPromptWindow> ready_prompt_window_;
-}; // class ReadyPromptWindowTest
-
-class ReadyPromptWindowButtonTest : public ReadyPromptWindowTest {
- public:
- void TearDown() {
- ASSERT_TRUE(ready_prompt_window_ != NULL);
- ASSERT_TRUE(ready_prompt_window_->DestroyWindow());
- ASSERT_TRUE(ready_prompt_window_ == NULL);
- ASSERT_FALSE(message_loop_.WasTimedOut());
-
- ReadyPromptWindowTest::TearDown();
- }
-
- protected:
- struct ClickOnCaptionData {
- const wchar_t* target_caption;
- bool found;
- }; // struct ClickOnCaptionData
-
- static BOOL CALLBACK ClickOnCaptionProc(HWND hwnd, LPARAM l_param) {
- wchar_t window_caption[256] = {0};
- size_t buffer_length = arraysize(window_caption);
-
- ClickOnCaptionData* data = reinterpret_cast<ClickOnCaptionData*>(l_param);
- EXPECT_TRUE(data->target_caption != NULL);
-
- if (data->target_caption == NULL)
- return FALSE;
-
- if (wcsnlen(data->target_caption, buffer_length + 1) == buffer_length + 1)
- return FALSE;
-
- if (::GetWindowText(hwnd, window_caption, buffer_length) ==
- static_cast<int>(buffer_length)) {
- return TRUE;
- }
-
- if (wcscmp(data->target_caption, window_caption) == 0) {
- EXPECT_FALSE(data->found);
-
- CRect client_rect;
- EXPECT_TRUE(::GetClientRect(hwnd, client_rect));
-
- CPoint center_point(client_rect.CenterPoint());
- LPARAM coordinates = (center_point.y << 16) | center_point.x;
-
- ::PostMessage(hwnd, WM_LBUTTONDOWN, 0, coordinates);
- ::PostMessage(hwnd, WM_LBUTTONUP, 0, coordinates);
-
- data->found = true;
- }
-
- return TRUE;
- }
-
- bool ClickOnCaption(const std::wstring& caption) {
- ClickOnCaptionData data = {caption.c_str(), false};
-
- ::EnumChildWindows(hwnd_, ClickOnCaptionProc,
- reinterpret_cast<LPARAM>(&data));
- return data.found;
- }
-
- void RunUntilCloseInfobar() {
- EXPECT_CALL(frame_, CloseInfobar()).WillOnce(QUIT_LOOP(message_loop_));
- ASSERT_NO_FATAL_FAILURE(message_loop_.RunFor(
- base::TimeDelta::FromSeconds(5)));
- }
-
- chrome_frame_test::TimedMsgLoop message_loop_;
-}; // class ReadyPromptWindowButtonTest
-
-TEST_F(ReadyPromptTest, ReadyPromptContentTest) {
- // owned by ReadyPromptContent
- MockReadyModeState* state = new MockReadyModeState();
- MockUrlLauncher* url_launcher = new MockUrlLauncher();
-
- scoped_ptr<ReadyPromptContent> content_(new ReadyPromptContent(state,
- url_launcher));
-
- content_->InstallInFrame(&frame_);
-
- // Ensure that, if a child is created, it is not visible yet.
- HWND child_hwnd = window_.GetZeroOrOneChildWindows();
- if (child_hwnd != NULL) {
- CWindow child(child_hwnd);
- RECT child_dimensions;
- EXPECT_TRUE(child.GetClientRect(&child_dimensions));
- EXPECT_FALSE(child.IsWindowVisible() && !::IsRectEmpty(&child_dimensions));
- }
-
- int desired_height = content_->GetDesiredSize(400, 0);
- EXPECT_GT(desired_height, 0);
- RECT dimensions = {10, 15, 410, 20};
- content_->SetDimensions(dimensions);
-
- child_hwnd = window_.GetZeroOrOneChildWindows();
- EXPECT_TRUE(child_hwnd != NULL);
-
- if (child_hwnd != NULL) {
- CWindow child(child_hwnd);
- EXPECT_TRUE(child.IsWindowVisible());
- RECT child_dimensions;
- EXPECT_TRUE(child.GetWindowRect(&child_dimensions));
- EXPECT_TRUE(window_.ScreenToClient(&child_dimensions));
- EXPECT_TRUE(::EqualRect(&child_dimensions, &dimensions));
- }
-
- // Being visible doesn't change the desired height
- EXPECT_EQ(desired_height, content_->GetDesiredSize(400, 0));
-
- content_.reset();
-
- EXPECT_TRUE(window_.GetZeroOrOneChildWindows() == NULL);
-}
-
-TEST_F(ReadyPromptWindowTest, Destroy) {
- // Should delete associated mocks, not invoke on ReadyModeState
- ready_prompt_window_->DestroyWindow();
-}
-
-TEST_F(ReadyPromptWindowButtonTest, ClickEnable) {
- EXPECT_CALL(*state_, AcceptChromeFrame());
- ASSERT_TRUE(ClickOnCaption(L"Enable"));
- RunUntilCloseInfobar();
-}
-
-TEST_F(ReadyPromptWindowButtonTest, ClickIgnore) {
- EXPECT_CALL(*state_, PermanentlyDeclineChromeFrame());
- ASSERT_TRUE(ClickOnCaption(L"Ignore"));
- RunUntilCloseInfobar();
-}
-
-// TODO(erikwright): test WebBrowserAdapter
-// TODO(erikwright): an integration test of ReadyMode::Configure with a mock
-// IWebBrowser2?