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

Side by Side Diff: chrome_frame/test/ie_configurator.cc

Issue 11149009: Configure IE 10 for the various Chrome Frame tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/test/ie_configurator.h" 5 #include "chrome_frame/test/ie_configurator.h"
6 6
7 #include <windows.h> 7 #include <windows.h>
8 #include <objbase.h> 8 #include <objbase.h>
9 9
10 #include <ios> 10 #include <ios>
(...skipping 24 matching lines...) Expand all
35 const wchar_t kKeyIEBrowserEmulation[] = 35 const wchar_t kKeyIEBrowserEmulation[] =
36 L"Software\\Microsoft\\Internet Explorer\\BrowserEmulation"; 36 L"Software\\Microsoft\\Internet Explorer\\BrowserEmulation";
37 const wchar_t kKeyPoliciesExt[] = 37 const wchar_t kKeyPoliciesExt[] =
38 L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Ext"; 38 L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Ext";
39 const wchar_t kValueEnabledV9[] = L"EnabledV9"; 39 const wchar_t kValueEnabledV9[] = L"EnabledV9";
40 const wchar_t kValueFirstTime[] = L"FirstTime"; 40 const wchar_t kValueFirstTime[] = L"FirstTime";
41 const wchar_t kValueIE9Completed[] = L"IE9RunOncePerInstallCompleted"; 41 const wchar_t kValueIE9Completed[] = L"IE9RunOncePerInstallCompleted";
42 const wchar_t kValueIE9CompletionTime[] = L"IE9RunOnceCompletionTime"; 42 const wchar_t kValueIE9CompletionTime[] = L"IE9RunOnceCompletionTime";
43 const wchar_t kValueIE9LastShown[] = L"IE9RunOnceLastShown"; 43 const wchar_t kValueIE9LastShown[] = L"IE9RunOnceLastShown";
44 const wchar_t kValueIE9TourNoShow[] = L"IE9TourNoShow"; 44 const wchar_t kValueIE9TourNoShow[] = L"IE9TourNoShow";
45 const wchar_t kValueIE10Completed[] = L"IE10RunOncePerInstallCompleted";
46 const wchar_t kValueIE10CompletionTime[] = L"IE10RunOnceCompletionTime";
45 const wchar_t kValueIgnoreFrameApprovalCheck[] = L"IgnoreFrameApprovalCheck"; 47 const wchar_t kValueIgnoreFrameApprovalCheck[] = L"IgnoreFrameApprovalCheck";
46 const wchar_t kValueMSCompatibilityMode[] = L"MSCompatibilityMode"; 48 const wchar_t kValueMSCompatibilityMode[] = L"MSCompatibilityMode";
47 49
48 // A helper class that accumulate a set of registry mutations and corresponding 50 // A helper class that accumulate a set of registry mutations and corresponding
49 // undo data via calls to its Add*() methods. The mutations can be applied to 51 // undo data via calls to its Add*() methods. The mutations can be applied to
50 // the registry (repeatedly, if desired) via a call to Apply(). Revert() can be 52 // the registry (repeatedly, if desired) via a call to Apply(). Revert() can be
51 // called to apply the accumulated undo data. 53 // called to apply the accumulated undo data.
52 class RegistrySetter { 54 class RegistrySetter {
53 public: 55 public:
54 RegistrySetter(); 56 RegistrySetter();
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 virtual void Initialize() OVERRIDE; 135 virtual void Initialize() OVERRIDE;
134 virtual void ApplySettings() OVERRIDE; 136 virtual void ApplySettings() OVERRIDE;
135 virtual void RevertSettings() OVERRIDE; 137 virtual void RevertSettings() OVERRIDE;
136 138
137 private: 139 private:
138 RegistrySetter setter_; 140 RegistrySetter setter_;
139 141
140 DISALLOW_COPY_AND_ASSIGN(IE7Configurator); 142 DISALLOW_COPY_AND_ASSIGN(IE7Configurator);
141 }; 143 };
142 144
143 // A configurator for Internet Explorer 9. 145 // A configurator for Internet Explorer 9 and 10.
144 class IE9Configurator : public IEConfigurator { 146 class ModernIEConfigurator : public IEConfigurator {
145 public: 147 public:
146 IE9Configurator(); 148 explicit ModernIEConfigurator(IEVersion ie_version);
147 virtual ~IE9Configurator(); 149 virtual ~ModernIEConfigurator();
148 150
149 virtual void Initialize() OVERRIDE; 151 virtual void Initialize() OVERRIDE;
150 virtual void ApplySettings() OVERRIDE; 152 virtual void ApplySettings() OVERRIDE;
151 virtual void RevertSettings() OVERRIDE; 153 virtual void RevertSettings() OVERRIDE;
152 154
153 private: 155 private:
154 static bool IsPerUserSetupComplete(); 156 // The names of the registry values used to determine if IE's one-time
157 // initialization has been completed.
158 struct RunOnceValueNames {
159 // This DWORD value is non-zero once initialization has been completed.
160 const wchar_t* completed;
161 // This 8-byte binary value is the FILETIME of completion.
162 const wchar_t* completion_time;
163 };
164
165 static RunOnceValueNames RunOnceNamesForVersion(IEVersion ie_version);
166 bool IsPerUserSetupComplete();
155 static string16 GetChromeFrameBHOCLSID(); 167 static string16 GetChromeFrameBHOCLSID();
156 static bool IsAddonPromptDisabledForChromeFrame(); 168 static bool IsAddonPromptDisabledForChromeFrame();
157 169
170 const IEVersion ie_version_;
171 RunOnceValueNames run_once_value_names_;
158 RegistrySetter setter_; 172 RegistrySetter setter_;
159 173
160 DISALLOW_COPY_AND_ASSIGN(IE9Configurator); 174 DISALLOW_COPY_AND_ASSIGN(ModernIEConfigurator);
161 }; 175 };
162 176
163 // RegistrySetter implementation. 177 // RegistrySetter implementation.
164 178
165 RegistrySetter::RegistrySetter() { 179 RegistrySetter::RegistrySetter() {
166 } 180 }
167 181
168 RegistrySetter::~RegistrySetter() { 182 RegistrySetter::~RegistrySetter() {
169 } 183 }
170 184
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 } 341 }
328 342
329 void IE7Configurator::ApplySettings() { 343 void IE7Configurator::ApplySettings() {
330 setter_.Apply(); 344 setter_.Apply();
331 } 345 }
332 346
333 void IE7Configurator::RevertSettings() { 347 void IE7Configurator::RevertSettings() {
334 setter_.Revert(); 348 setter_.Revert();
335 } 349 }
336 350
337 // IE9Configurator implementation 351 // ModernIEConfigurator implementation
338 352
339 IE9Configurator::IE9Configurator() { 353 ModernIEConfigurator::ModernIEConfigurator(IEVersion ie_version)
354 : ie_version_(ie_version),
355 run_once_value_names_(RunOnceNamesForVersion(ie_version)) {
340 } 356 }
341 357
342 IE9Configurator::~IE9Configurator() { 358 ModernIEConfigurator::~ModernIEConfigurator() {
359 }
360
361 // static
362 ModernIEConfigurator::RunOnceValueNames
robertshield 2012/10/14 01:30:34 how do you feel about sticking this in a construct
grt (UTC plus 2) 2012/10/15 14:16:17 Not so great. The names struct is a super-lightwe
363 ModernIEConfigurator::RunOnceNamesForVersion(
364 IEVersion ie_version) {
365 RunOnceValueNames names = {};
366 switch (ie_version) {
367 case IE_9:
368 names.completed = kValueIE9Completed;
369 names.completion_time = kValueIE9CompletionTime;
370 break;
371 case IE_10:
372 names.completed = kValueIE10Completed;
373 names.completion_time = kValueIE10CompletionTime;
374 break;
375 default:
376 NOTREACHED();
377 }
378 return names;
343 } 379 }
344 380
345 // Returns true if the per-user setup is complete. 381 // Returns true if the per-user setup is complete.
346 // static 382 bool ModernIEConfigurator::IsPerUserSetupComplete() {
347 bool IE9Configurator::IsPerUserSetupComplete() {
348 bool is_complete = false; 383 bool is_complete = false;
349 base::win::RegKey key_main; 384 base::win::RegKey key_main;
350 385
351 if (key_main.Open(HKEY_CURRENT_USER, kKeyIEMain, 386 if (key_main.Open(HKEY_CURRENT_USER, kKeyIEMain,
352 KEY_QUERY_VALUE) == ERROR_SUCCESS) { 387 KEY_QUERY_VALUE) == ERROR_SUCCESS) {
353 DWORD completed = 0; 388 DWORD completed = 0;
354 FILETIME completion_time = {}; 389 FILETIME completion_time = {};
355 DWORD size = sizeof(completion_time); 390 DWORD size = sizeof(completion_time);
356 391
357 if (key_main.ReadValueDW(kValueIE9Completed, 392 if (key_main.ReadValueDW(run_once_value_names_.completed,
358 &completed) == ERROR_SUCCESS && 393 &completed) == ERROR_SUCCESS &&
359 completed != 0 && 394 completed != 0 &&
360 key_main.ReadValue(kValueIE9CompletionTime, &completion_time, 395 key_main.ReadValue(run_once_value_names_.completion_time,
361 &size, NULL) == ERROR_SUCCESS && 396 &completion_time, &size, NULL) == ERROR_SUCCESS &&
362 size == sizeof(completion_time)) { 397 size == sizeof(completion_time)) {
363 is_complete = true; 398 is_complete = true;
364 } 399 }
365 } 400 }
366 401
367 return is_complete; 402 return is_complete;
368 } 403 }
369 404
370 // Returns the path to the IE9 Approved Extensions key for Chrome Frame. 405 // Returns the path to the IE9 Approved Extensions key for Chrome Frame.
371 // static 406 // static
372 string16 IE9Configurator::GetChromeFrameBHOCLSID() { 407 string16 ModernIEConfigurator::GetChromeFrameBHOCLSID() {
373 string16 bho_guid(39, L'\0'); 408 string16 bho_guid(39, L'\0');
374 int guid_len = StringFromGUID2(CLSID_ChromeFrameBHO, &bho_guid[0], 409 int guid_len = StringFromGUID2(CLSID_ChromeFrameBHO, &bho_guid[0],
375 bho_guid.size()); 410 bho_guid.size());
376 DCHECK_EQ(guid_len, static_cast<int>(bho_guid.size())); 411 DCHECK_EQ(guid_len, static_cast<int>(bho_guid.size()));
377 bho_guid.resize(guid_len - 1); 412 bho_guid.resize(guid_len - 1);
378 return bho_guid; 413 return bho_guid;
379 } 414 }
380 415
381 // Returns true if the add-on enablement prompt is disabled by Group Policy. 416 // Returns true if the add-on enablement prompt is disabled by Group Policy.
382 // static 417 // static
383 bool IE9Configurator::IsAddonPromptDisabledForChromeFrame() { 418 bool ModernIEConfigurator::IsAddonPromptDisabledForChromeFrame() {
384 bool is_disabled = false; 419 bool is_disabled = false;
385 base::win::RegKey key; 420 base::win::RegKey key;
386 421
387 // See if the prompt is disabled for this user of IE. 422 // See if the prompt is disabled for this user of IE.
388 if (key.Open(HKEY_CURRENT_USER, kKeyIEApprovedExtensions, 423 if (key.Open(HKEY_CURRENT_USER, kKeyIEApprovedExtensions,
389 KEY_QUERY_VALUE) == ERROR_SUCCESS) { 424 KEY_QUERY_VALUE) == ERROR_SUCCESS) {
390 DWORD type = REG_NONE; 425 DWORD type = REG_NONE;
391 DWORD size = 0; 426 DWORD size = 0;
392 if (key.ReadValue(GetChromeFrameBHOCLSID().c_str(), NULL, &size, 427 if (key.ReadValue(GetChromeFrameBHOCLSID().c_str(), NULL, &size,
393 &type) == ERROR_SUCCESS && 428 &type) == ERROR_SUCCESS &&
(...skipping 10 matching lines...) Expand all
404 if (key.ReadValueDW(kValueIgnoreFrameApprovalCheck, 439 if (key.ReadValueDW(kValueIgnoreFrameApprovalCheck,
405 &ignore) == ERROR_SUCCESS && 440 &ignore) == ERROR_SUCCESS &&
406 ignore != 0) { 441 ignore != 0) {
407 is_disabled = true; 442 is_disabled = true;
408 } 443 }
409 } 444 }
410 445
411 return is_disabled; 446 return is_disabled;
412 } 447 }
413 448
414 void IE9Configurator::Initialize() { 449 void ModernIEConfigurator::Initialize() {
415 // Check for per-user IE setup. 450 // Check for per-user IE setup.
416 if (!IsPerUserSetupComplete()) { 451 if (!IsPerUserSetupComplete()) {
417 const HKEY root = HKEY_CURRENT_USER; 452 const HKEY root = HKEY_CURRENT_USER;
418 // Suppress the "Set up Internet Explorer 9" dialog. 453 // Suppress the "Set up Internet Explorer 9" dialog.
robertshield 2012/10/14 01:30:34 nit: no 9
grt (UTC plus 2) 2012/10/15 14:16:17 Done.
419 setter_.AddDWORDValue(root, kKeyIEMain, kValueIE9Completed, 1); 454 setter_.AddDWORDValue(root, kKeyIEMain, run_once_value_names_.completed, 1);
420 setter_.AddFILETIMEValue(root, kKeyIEMain, kValueIE9CompletionTime, 455 setter_.AddFILETIMEValue(root, kKeyIEMain,
456 run_once_value_names_.completion_time,
421 base::Time::Now().ToFileTime()); 457 base::Time::Now().ToFileTime());
422 setter_.AddDWORDValue(root, kKeyIEMain, kValueIE9LastShown, 1); 458 if (ie_version_ == IE_9) {
423 // Don't show a tour of IE 9. 459 setter_.AddDWORDValue(root, kKeyIEMain, kValueIE9LastShown, 1);
424 setter_.AddDWORDValue(root, kKeyIEMain, kValueIE9TourNoShow, 1); 460 // Don't show a tour of IE 9.
461 setter_.AddDWORDValue(root, kKeyIEMain, kValueIE9TourNoShow, 1);
462 }
425 // Turn off the phishing filter. 463 // Turn off the phishing filter.
426 setter_.AddDWORDValue(root, kKeyIEPhishingFilter, kValueEnabledV9, 0); 464 setter_.AddDWORDValue(root, kKeyIEPhishingFilter, kValueEnabledV9, 0);
427 // Don't download compatibility view lists. 465 // Don't download compatibility view lists.
428 setter_.AddDWORDValue(root, kKeyIEBrowserEmulation, 466 setter_.AddDWORDValue(root, kKeyIEBrowserEmulation,
429 kValueMSCompatibilityMode, 0); 467 kValueMSCompatibilityMode, 0);
430 } 468 }
431 469
432 // Turn off the "'Foo' add-on from 'Bar' is ready for use." prompt via Group 470 // Turn off the "'Foo' add-on from 'Bar' is ready for use." prompt via Group
433 // Policy. 471 // Policy.
434 if (!IsAddonPromptDisabledForChromeFrame()) { 472 if (!IsAddonPromptDisabledForChromeFrame()) {
435 setter_.AddDWORDValue(HKEY_LOCAL_MACHINE, kKeyPoliciesExt, 473 setter_.AddDWORDValue(HKEY_LOCAL_MACHINE, kKeyPoliciesExt,
436 kValueIgnoreFrameApprovalCheck, 1); 474 kValueIgnoreFrameApprovalCheck, 1);
437 } 475 }
438 } 476 }
439 477
440 void IE9Configurator::ApplySettings() { 478 void ModernIEConfigurator::ApplySettings() {
441 setter_.Apply(); 479 setter_.Apply();
442 } 480 }
443 481
444 void IE9Configurator::RevertSettings() { 482 void ModernIEConfigurator::RevertSettings() {
445 setter_.Revert(); 483 setter_.Revert();
446 } 484 }
447 485
448 } // namespace 486 } // namespace
449 487
450 // Configurator implementation. 488 // Configurator implementation.
451 489
452 IEConfigurator::IEConfigurator() { 490 IEConfigurator::IEConfigurator() {
453 } 491 }
454 492
455 IEConfigurator::~IEConfigurator() { 493 IEConfigurator::~IEConfigurator() {
456 } 494 }
457 495
458 IEConfigurator* CreateConfigurator() { 496 IEConfigurator* CreateConfigurator() {
459 IEConfigurator* configurator = NULL; 497 IEConfigurator* configurator = NULL;
460 498
461 switch (GetInstalledIEVersion()) { 499 IEVersion ie_version = GetInstalledIEVersion();
500 switch (ie_version) {
462 case IE_7: 501 case IE_7:
463 configurator = new IE7Configurator(); 502 configurator = new IE7Configurator();
464 break; 503 break;
465 case IE_9: 504 case IE_9:
466 configurator = new IE9Configurator(); 505 case IE_10:
506 configurator = new ModernIEConfigurator(ie_version);
467 break; 507 break;
468 default: 508 default:
469 break; 509 break;
470 } 510 }
471 511
472 return configurator; 512 return configurator;
473 } 513 }
474 514
475 void InstallIEConfigurator() { 515 void InstallIEConfigurator() {
476 IEConfigurator* configurator = CreateConfigurator(); 516 IEConfigurator* configurator = CreateConfigurator();
477 517
478 if (configurator != NULL) { 518 if (configurator != NULL) {
479 testing::UnitTest::GetInstance()->listeners().Append( 519 testing::UnitTest::GetInstance()->listeners().Append(
480 new ConfiguratorDriver(configurator)); 520 new ConfiguratorDriver(configurator));
481 } 521 }
482 } 522 }
483 523
484 } // namespace chrome_frame_test 524 } // namespace chrome_frame_test
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698