Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4506)

Unified Diff: chrome_frame/test/ie_configurator.cc

Issue 126143005: Remove Chrome Frame code and resources. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sync to r244038 Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome_frame/test/ie_configurator.h ('k') | chrome_frame/test/ie_event_sink.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome_frame/test/ie_configurator.cc
diff --git a/chrome_frame/test/ie_configurator.cc b/chrome_frame/test/ie_configurator.cc
deleted file mode 100644
index 78d8711a5f770b6882d268ddcd62a7f881d7353d..0000000000000000000000000000000000000000
--- a/chrome_frame/test/ie_configurator.cc
+++ /dev/null
@@ -1,598 +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/test/ie_configurator.h"
-
-#include <windows.h>
-#include <objbase.h>
-
-#include <ios>
-#include <list>
-#include <vector>
-
-#include "base/compiler_specific.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/strings/string16.h"
-#include "base/time/time.h"
-#include "base/win/registry.h"
-#include "chrome_frame/chrome_tab.h"
-#include "chrome_frame/test/chrome_frame_test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace chrome_frame_test {
-
-namespace {
-
-const wchar_t kKeyIEApprovedExtensions[] =
- L"Software\\Microsoft\\Internet Explorer\\Approved Extensions\\";
-const wchar_t kKeyIEInformationBar[] =
- L"Software\\Microsoft\\Internet Explorer\\InformationBar";
-const wchar_t kKeyIEMain[] =
- L"Software\\Microsoft\\Internet Explorer\\Main";
-const wchar_t kKeyIEPhishingFilter[] =
- L"Software\\Microsoft\\Internet Explorer\\PhishingFilter";
-const wchar_t kKeyIEBrowserEmulation[] =
- L"Software\\Microsoft\\Internet Explorer\\BrowserEmulation";
-const wchar_t kKeyPoliciesExt[] =
- L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Ext";
-const wchar_t kValueEnabledV8[] = L"EnabledV8";
-const wchar_t kValueEnabledV9[] = L"EnabledV9";
-const wchar_t kValueFirstTime[] = L"FirstTime";
-const wchar_t kValueIE8Completed[] = L"IE8RunOncePerInstallCompleted";
-const wchar_t kValueIE8CompletionTime[] = L"IE8RunOnceCompletionTime";
-const wchar_t kValueIE8RunOnceLastShown[] = L"IE8RunOnceLastShown";
-const wchar_t kValueIE8RunOnceLastShownTimestamp[] =
- L"IE8RunOnceLastShown_TIMESTAMP";
-const wchar_t kValueIE8TourNoShow[] = L"IE8TourNoShow";
-const wchar_t kValueIE9Completed[] = L"IE9RunOncePerInstallCompleted";
-const wchar_t kValueIE9CompletionTime[] = L"IE9RunOnceCompletionTime";
-const wchar_t kValueIE9RunOnceLastShown[] = L"IE9RunOnceLastShown";
-const wchar_t kValueIE9RunOnceLastShownTimestamp[] =
- L"IE9RunOnceLastShown_TIMESTAMP";
-const wchar_t kValueIE9TourNoShow[] = L"IE9TourNoShow";
-const wchar_t kValueIE10Completed[] = L"IE10RunOncePerInstallCompleted";
-const wchar_t kValueIE10CompletionTime[] = L"IE10RunOnceCompletionTime";
-const wchar_t kValueIE10RunOnceLastShown[] = L"IE10RunOnceLastShown";
-const wchar_t kValueIE10RunOnceLastShownTimestamp[] =
- L"IE10RunOnceLastShown_TIMESTAMP";
-const wchar_t kValueIgnoreFrameApprovalCheck[] = L"IgnoreFrameApprovalCheck";
-const wchar_t kValueMSCompatibilityMode[] = L"MSCompatibilityMode";
-
-// A helper class that accumulate a set of registry mutations and corresponding
-// undo data via calls to its Add*() methods. The mutations can be applied to
-// the registry (repeatedly, if desired) via a call to Apply(). Revert() can be
-// called to apply the accumulated undo data.
-class RegistrySetter {
- public:
- RegistrySetter();
- ~RegistrySetter();
-
- // Adds a mutation that sets a REG_DWORD registry value, creating any
- // intermediate keys as necessary. |key| and |value| must remain valid
- // throughout all calls to Apply().
- void AddDWORDValue(HKEY root, const wchar_t* key, const wchar_t* value,
- DWORD data);
-
- // Adds a mutation that assigns a FILETIME to a REG_BINARY registry value,
- // creating any intermediate keys as necessary. |key| and |value| must remain
- // valid throughout all calls to Apply().
- void AddFILETIMEValue(HKEY root, const wchar_t* key, const wchar_t* value,
- FILETIME data);
-
- // Applies all mutations in the order they were added. Errors encountered
- // along the way are logged, but do not stop progress.
- void Apply() const;
-
- // Applies the undo data in the reverse order that their corresponding
- // mutations were added.
- void Revert() const;
-
- private:
- // The data for an individual registry value. A non-existent value is
- // indicated by type = REG_NONE and empty data.
- struct RegistryData {
- HKEY root;
- const wchar_t* key;
- const wchar_t* value;
- DWORD type;
- std::vector<uint8> data;
- };
-
- typedef std::list<RegistryData> RegistryDataList;
-
- // Adds a mutation to the end of the apply list with the given data, and a
- // mutation to the revert list with the current state of the value.
- void AddValue(HKEY root, const wchar_t* key, const wchar_t* value, DWORD type,
- const uint8* value_begin, size_t value_len);
-
- // Add a mutation to the revert list that restores a registry value to its
- // current state. This only adds entries to set or remove |value|. If
- // portions of the hierarchy identified by |key| do not exist, but are created
- // between the invocation of this method and the time the revert list is
- // applied, only |value| is deleted upon revert (intermediate keys are not
- // deleted).
- void SaveCurrentValue(HKEY root, const wchar_t* key, const wchar_t* value);
-
- // Applies all mutations in |data_list| in order.
- static void ApplyList(const RegistryDataList& data_list);
-
- RegistryDataList apply_list_;
- RegistryDataList revert_list_;
-
- DISALLOW_COPY_AND_ASSIGN(RegistrySetter);
-};
-
-// A Google Test event listener that delegates to a configurator.
-class ConfiguratorDriver : public testing::EmptyTestEventListener {
- public:
- explicit ConfiguratorDriver(IEConfigurator* configurator);
- virtual ~ConfiguratorDriver();
-
- virtual void OnTestProgramStart(const testing::UnitTest& unit_test) OVERRIDE;
- virtual void OnTestStart(const testing::TestInfo& test_info) OVERRIDE;
- virtual void OnTestProgramEnd(const testing::UnitTest& unit_test) OVERRIDE;
-
- private:
- scoped_ptr<IEConfigurator> configurator_;
- DISALLOW_COPY_AND_ASSIGN(ConfiguratorDriver);
-};
-
-// A configurator for Internet Explorer 7.
-class IE7Configurator : public IEConfigurator {
- public:
- IE7Configurator();
- virtual ~IE7Configurator();
-
- virtual void Initialize() OVERRIDE;
- virtual void ApplySettings() OVERRIDE;
- virtual void RevertSettings() OVERRIDE;
-
- private:
- RegistrySetter setter_;
-
- DISALLOW_COPY_AND_ASSIGN(IE7Configurator);
-};
-
-// A configurator for Internet Explorer 8, 9, and 10.
-class ModernIEConfigurator : public IEConfigurator {
- public:
- explicit ModernIEConfigurator(IEVersion ie_version);
- virtual ~ModernIEConfigurator();
-
- virtual void Initialize() OVERRIDE;
- virtual void ApplySettings() OVERRIDE;
- virtual void RevertSettings() OVERRIDE;
-
- private:
- // The names of the registry values used to determine if IE's one-time
- // initialization has been completed.
- struct RunOnceValueNames {
- // This DWORD value is non-zero once initialization has been completed.
- const wchar_t* completed;
- // This 8-byte binary value is the FILETIME of completion.
- const wchar_t* completion_time;
- // This DWORD value is non-zero if run-once was previously deferred.
- const wchar_t* last_shown;
- // This 8-byte binary value is the FILETIME of run-once deferral.
- const wchar_t* last_shown_timestamp;
- };
-
- static const RunOnceValueNames kIE8ValueNames;
- static const RunOnceValueNames kIE9ValueNames;
- static const RunOnceValueNames kIE10ValueNames;
-
- static const RunOnceValueNames* RunOnceNamesForVersion(IEVersion ie_version);
- bool IsPerUserSetupComplete();
- static base::string16 GetChromeFrameBHOCLSID();
- static bool IsAddonPromptDisabledForChromeFrame();
-
- const IEVersion ie_version_;
- const RunOnceValueNames* run_once_value_names_;
- RegistrySetter setter_;
-
- DISALLOW_COPY_AND_ASSIGN(ModernIEConfigurator);
-};
-
-// RegistrySetter implementation.
-
-RegistrySetter::RegistrySetter() {
-}
-
-RegistrySetter::~RegistrySetter() {
-}
-
-void RegistrySetter::AddValue(HKEY root,
- const wchar_t* key,
- const wchar_t* value,
- DWORD type,
- const uint8* value_begin,
- size_t value_len) {
- RegistryData the_data = {
- root,
- key,
- value,
- type,
- std::vector<uint8>(value_begin, value_begin + value_len)
- };
- apply_list_.push_back(the_data);
- SaveCurrentValue(root, key, value);
-}
-
-void RegistrySetter::SaveCurrentValue(HKEY root,
- const wchar_t* key,
- const wchar_t* value) {
- base::win::RegKey the_key;
- RegistryData the_data = { root, key, value, REG_NONE };
-
- LONG result = the_key.Open(root, key, KEY_QUERY_VALUE);
- if (result == ERROR_SUCCESS) {
- DWORD size = 0;
- result = the_key.ReadValue(value, NULL, &size, &the_data.type);
- if (result == ERROR_FILE_NOT_FOUND) {
- // Add a mutation to delete the value.
- the_data.type = REG_NONE;
- revert_list_.push_front(the_data);
- } else if (result == ERROR_SUCCESS) {
- the_data.data.resize(size);
- result = the_key.ReadValue(value, &the_data.data[0], &size,
- &the_data.type);
- if (result == ERROR_SUCCESS) {
- revert_list_.push_front(the_data);
- } else {
- ::SetLastError(result);
- PLOG(ERROR) << __FUNCTION__ << " unexpected error reading data for "
- << value << " from key " << key
- << ". The current value will not be restored upon revert.";
- }
- } else {
- ::SetLastError(result);
- PLOG(ERROR) << __FUNCTION__ << " unexpected error reading " << value
- << " from key " << key
- << ". The current value will not be restored upon revert.";
- }
- } else if (result == ERROR_FILE_NOT_FOUND) {
- // Add a mutation to delete the value (but not any keys).
- revert_list_.push_front(the_data);
- } else {
- ::SetLastError(result);
- PLOG(ERROR) << __FUNCTION__ << " unexpected error opening key " << key
- << " to read value " << value
- << ". The current value will not be restored upon revert.";
- }
-}
-
-void RegistrySetter::AddDWORDValue(HKEY root,
- const wchar_t* key,
- const wchar_t* value,
- DWORD data) {
- const uint8* data_ptr = reinterpret_cast<uint8*>(&data);
- AddValue(root, key, value, REG_DWORD, data_ptr, sizeof(data));
-}
-
-void RegistrySetter::AddFILETIMEValue(HKEY root,
- const wchar_t* key,
- const wchar_t* value,
- FILETIME data) {
- const uint8* data_ptr = reinterpret_cast<uint8*>(&data);
- AddValue(root, key, value, REG_BINARY, data_ptr, sizeof(data));
-}
-
-// static
-void RegistrySetter::ApplyList(const RegistryDataList& data_list) {
- base::win::RegKey key;
- LONG result = ERROR_SUCCESS;
- for (RegistryDataList::const_iterator scan(data_list.begin());
- scan != data_list.end(); ++scan) {
- const RegistryData& data = *scan;
- const bool do_delete = (data.type == REG_NONE && data.data.empty());
- result = do_delete ?
- key.Open(data.root, data.key, KEY_SET_VALUE) :
- key.Create(data.root, data.key, KEY_SET_VALUE);
- if (result == ERROR_SUCCESS) {
- if (do_delete) {
- result = key.DeleteValue(data.value);
- } else {
- result = key.WriteValue(data.value,
- data.data.empty() ? NULL : &data.data[0],
- data.data.size(), data.type);
- }
- if (result != ERROR_SUCCESS) {
- ::SetLastError(result);
- PLOG(ERROR) << "Failed to " << (do_delete ? "delete" : "set")
- << " value " << data.value
- << " in registry key " << data.key
- << " in hive " << std::hex <<data.root << std::dec;
- }
- } else if (!do_delete || result != ERROR_FILE_NOT_FOUND) {
- ::SetLastError(result);
- PLOG(ERROR) << "Failed to create/open registry key " << data.key
- << " in hive " << std::hex << data.root << std::dec;
- }
- }
-}
-
-void RegistrySetter::Apply() const {
- ApplyList(apply_list_);
-}
-
-void RegistrySetter::Revert() const {
- ApplyList(revert_list_);
-}
-
-// ConfiguratorDriver implementation.
-
-ConfiguratorDriver::ConfiguratorDriver(IEConfigurator* configurator)
- : configurator_(configurator) {
- DCHECK(configurator);
-}
-
-ConfiguratorDriver::~ConfiguratorDriver() {
-}
-
-void ConfiguratorDriver::OnTestProgramStart(
- const testing::UnitTest& unit_test) {
- configurator_->Initialize();
-}
-
-void ConfiguratorDriver::OnTestStart(const testing::TestInfo& test_info) {
- configurator_->ApplySettings();
-}
-
-void ConfiguratorDriver::OnTestProgramEnd(const testing::UnitTest& unit_test) {
- configurator_->RevertSettings();
-}
-
-// IE7Configurator implementation
-
-IE7Configurator::IE7Configurator() {
-}
-
-IE7Configurator::~IE7Configurator() {
-}
-
-void IE7Configurator::Initialize() {
- // Suppress the friendly "Hi! I popped up an info bar for you. Did you see
- // the info bar I just showed you? There's a yellow thing in your IE window
- // that wasn't there before! I call it an Information Bar. Did you notice
- // the Information Bar?" dialog that it likes to show.
- setter_.AddDWORDValue(HKEY_CURRENT_USER, kKeyIEInformationBar,
- kValueFirstTime, 0);
-}
-
-void IE7Configurator::ApplySettings() {
- setter_.Apply();
-}
-
-void IE7Configurator::RevertSettings() {
- setter_.Revert();
-}
-
-// ModernIEConfigurator implementation
-
-const ModernIEConfigurator::RunOnceValueNames
- ModernIEConfigurator::kIE8ValueNames = {
- kValueIE8Completed,
- kValueIE8CompletionTime,
- kValueIE8RunOnceLastShown,
- kValueIE8RunOnceLastShownTimestamp,
-};
-
-const ModernIEConfigurator::RunOnceValueNames
- ModernIEConfigurator::kIE9ValueNames = {
- kValueIE9Completed,
- kValueIE9CompletionTime,
- kValueIE9RunOnceLastShown,
- kValueIE9RunOnceLastShownTimestamp,
-};
-
-const ModernIEConfigurator::RunOnceValueNames
- ModernIEConfigurator::kIE10ValueNames = {
- kValueIE10Completed,
- kValueIE10CompletionTime,
- kValueIE10RunOnceLastShown,
- kValueIE10RunOnceLastShownTimestamp,
-};
-
-ModernIEConfigurator::ModernIEConfigurator(IEVersion ie_version)
- : ie_version_(ie_version),
- run_once_value_names_(RunOnceNamesForVersion(ie_version)) {
-}
-
-ModernIEConfigurator::~ModernIEConfigurator() {
-}
-
-// static
-const ModernIEConfigurator::RunOnceValueNames*
- ModernIEConfigurator::RunOnceNamesForVersion(
- IEVersion ie_version) {
- switch (ie_version) {
- case IE_8:
- return &kIE8ValueNames;
- break;
- case IE_9:
- return &kIE9ValueNames;
- break;
- case IE_10:
- return &kIE10ValueNames;
- break;
- default:
- NOTREACHED();
- }
- return NULL;
-}
-
-// Returns true if the per-user setup is complete.
-bool ModernIEConfigurator::IsPerUserSetupComplete() {
- bool is_complete = false;
- base::win::RegKey key_main;
-
- if (key_main.Open(HKEY_CURRENT_USER, kKeyIEMain,
- KEY_QUERY_VALUE) != ERROR_SUCCESS) {
- return false;
- }
-
- DWORD dword_value = 0;
- FILETIME shown_time = {};
- FILETIME completion_time = {};
- DWORD size = sizeof(completion_time);
-
- // See if the user has seen the first-run prompt.
- if (key_main.ReadValue(run_once_value_names_->last_shown_timestamp,
- &shown_time, &size, NULL) != ERROR_SUCCESS ||
- size != sizeof(shown_time)) {
- return false;
- }
-
- // See if setup was completed.
- if (key_main.ReadValue(run_once_value_names_->completion_time,
- &completion_time, &size, NULL) != ERROR_SUCCESS ||
- size != sizeof(completion_time)) {
- return false;
- }
-
- // See if setup was completed after the last time the prompt was shown.
- base::Time time_shown = base::Time::FromFileTime(shown_time);
- base::Time time_completed = base::Time::FromFileTime(completion_time);
- if (time_shown >= time_completed)
- return false;
-
- return true;
-}
-
-// Returns the path to the IE9 Approved Extensions key for Chrome Frame.
-// static
-base::string16 ModernIEConfigurator::GetChromeFrameBHOCLSID() {
- base::string16 bho_guid(39, L'\0');
- int guid_len = StringFromGUID2(CLSID_ChromeFrameBHO, &bho_guid[0],
- bho_guid.size());
- DCHECK_EQ(guid_len, static_cast<int>(bho_guid.size()));
- bho_guid.resize(guid_len - 1);
- return bho_guid;
-}
-
-// Returns true if the add-on enablement prompt is disabled by Group Policy.
-// static
-bool ModernIEConfigurator::IsAddonPromptDisabledForChromeFrame() {
- bool is_disabled = false;
- base::win::RegKey key;
-
- // See if the prompt is disabled for this user of IE.
- if (key.Open(HKEY_CURRENT_USER, kKeyIEApprovedExtensions,
- KEY_QUERY_VALUE) == ERROR_SUCCESS) {
- DWORD type = REG_NONE;
- DWORD size = 0;
- if (key.ReadValue(GetChromeFrameBHOCLSID().c_str(), NULL, &size,
- &type) == ERROR_SUCCESS &&
- type == REG_BINARY) {
- is_disabled = true;
- }
- }
-
- // Now check if the prompt is disabled for all add-ons via Group Policy.
- if (!is_disabled &&
- key.Open(HKEY_LOCAL_MACHINE, kKeyPoliciesExt,
- KEY_QUERY_VALUE) == ERROR_SUCCESS) {
- DWORD ignore = 0;
- if (key.ReadValueDW(kValueIgnoreFrameApprovalCheck,
- &ignore) == ERROR_SUCCESS &&
- ignore != 0) {
- is_disabled = true;
- }
- }
-
- return is_disabled;
-}
-
-void ModernIEConfigurator::Initialize() {
- // Check for per-user IE setup.
- if (!IsPerUserSetupComplete()) {
- base::Time time(base::Time::Now());
- const HKEY root = HKEY_CURRENT_USER;
- // Suppress the "Set up Internet Explorer" dialog.
- setter_.AddDWORDValue(root, kKeyIEMain, run_once_value_names_->last_shown,
- 1);
- setter_.AddDWORDValue(root, kKeyIEMain, run_once_value_names_->completed,
- 1);
- setter_.AddFILETIMEValue(root, kKeyIEMain,
- run_once_value_names_->last_shown_timestamp,
- time.ToFileTime());
- time += base::TimeDelta::FromMilliseconds(10);
- setter_.AddFILETIMEValue(root, kKeyIEMain,
- run_once_value_names_->completion_time,
- time.ToFileTime());
- if (ie_version_ < IE_10) {
- // Don't show a tour of IE 8 and 9.
- setter_.AddDWORDValue(
- root,
- kKeyIEMain,
- (ie_version_ == IE_8 ? kValueIE8TourNoShow : kValueIE9TourNoShow),
- 1);
- }
- // Turn off the phishing filter.
- setter_.AddDWORDValue(
- root,
- kKeyIEPhishingFilter,
- (ie_version_ == IE_8 ? kValueEnabledV8 : kValueEnabledV9),
- 0);
- // Don't download compatibility view lists.
- setter_.AddDWORDValue(root, kKeyIEBrowserEmulation,
- kValueMSCompatibilityMode, 0);
- }
-
- // Turn off the "'Foo' add-on from 'Bar' is ready for use." prompt via Group
- // Policy.
- if (!IsAddonPromptDisabledForChromeFrame()) {
- setter_.AddDWORDValue(HKEY_LOCAL_MACHINE, kKeyPoliciesExt,
- kValueIgnoreFrameApprovalCheck, 1);
- }
-}
-
-void ModernIEConfigurator::ApplySettings() {
- setter_.Apply();
-}
-
-void ModernIEConfigurator::RevertSettings() {
- setter_.Revert();
-}
-
-} // namespace
-
-// Configurator implementation.
-
-IEConfigurator::IEConfigurator() {
-}
-
-IEConfigurator::~IEConfigurator() {
-}
-
-IEConfigurator* CreateConfigurator() {
- IEConfigurator* configurator = NULL;
-
- IEVersion ie_version = GetInstalledIEVersion();
- switch (ie_version) {
- case IE_7:
- configurator = new IE7Configurator();
- break;
- case IE_8:
- case IE_9:
- case IE_10:
- configurator = new ModernIEConfigurator(ie_version);
- break;
- default:
- break;
- }
-
- return configurator;
-}
-
-void InstallIEConfigurator() {
- IEConfigurator* configurator = CreateConfigurator();
-
- if (configurator != NULL) {
- testing::UnitTest::GetInstance()->listeners().Append(
- new ConfiguratorDriver(configurator));
- }
-}
-
-} // namespace chrome_frame_test
« no previous file with comments | « chrome_frame/test/ie_configurator.h ('k') | chrome_frame/test/ie_event_sink.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698