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

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: tweaked runonce value names 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 const RunOnceValueNames kIE9ValueNames;
166 static const RunOnceValueNames kIE10ValueNames;
167
168 static const RunOnceValueNames* RunOnceNamesForVersion(IEVersion ie_version);
169 bool IsPerUserSetupComplete();
155 static string16 GetChromeFrameBHOCLSID(); 170 static string16 GetChromeFrameBHOCLSID();
156 static bool IsAddonPromptDisabledForChromeFrame(); 171 static bool IsAddonPromptDisabledForChromeFrame();
157 172
173 const IEVersion ie_version_;
174 const RunOnceValueNames* run_once_value_names_;
158 RegistrySetter setter_; 175 RegistrySetter setter_;
159 176
160 DISALLOW_COPY_AND_ASSIGN(IE9Configurator); 177 DISALLOW_COPY_AND_ASSIGN(ModernIEConfigurator);
161 }; 178 };
162 179
163 // RegistrySetter implementation. 180 // RegistrySetter implementation.
164 181
165 RegistrySetter::RegistrySetter() { 182 RegistrySetter::RegistrySetter() {
166 } 183 }
167 184
168 RegistrySetter::~RegistrySetter() { 185 RegistrySetter::~RegistrySetter() {
169 } 186 }
170 187
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 } 344 }
328 345
329 void IE7Configurator::ApplySettings() { 346 void IE7Configurator::ApplySettings() {
330 setter_.Apply(); 347 setter_.Apply();
331 } 348 }
332 349
333 void IE7Configurator::RevertSettings() { 350 void IE7Configurator::RevertSettings() {
334 setter_.Revert(); 351 setter_.Revert();
335 } 352 }
336 353
337 // IE9Configurator implementation 354 // ModernIEConfigurator implementation
338 355
339 IE9Configurator::IE9Configurator() { 356 const ModernIEConfigurator::RunOnceValueNames
357 ModernIEConfigurator::kIE9ValueNames = {
358 kValueIE9Completed,
359 kValueIE9CompletionTime,
360 };
361
362 const ModernIEConfigurator::RunOnceValueNames
363 ModernIEConfigurator::kIE10ValueNames = {
364 kValueIE10Completed,
365 kValueIE10CompletionTime,
366 };
367
368 ModernIEConfigurator::ModernIEConfigurator(IEVersion ie_version)
369 : ie_version_(ie_version),
370 run_once_value_names_(RunOnceNamesForVersion(ie_version)) {
340 } 371 }
341 372
342 IE9Configurator::~IE9Configurator() { 373 ModernIEConfigurator::~ModernIEConfigurator() {
374 }
375
376 // static
377 const ModernIEConfigurator::RunOnceValueNames*
378 ModernIEConfigurator::RunOnceNamesForVersion(
379 IEVersion ie_version) {
380 switch (ie_version) {
381 case IE_9:
382 return &kIE9ValueNames;
383 break;
384 case IE_10:
385 return &kIE10ValueNames;
386 break;
387 default:
388 NOTREACHED();
389 }
390 return NULL;
343 } 391 }
344 392
345 // Returns true if the per-user setup is complete. 393 // Returns true if the per-user setup is complete.
346 // static 394 bool ModernIEConfigurator::IsPerUserSetupComplete() {
347 bool IE9Configurator::IsPerUserSetupComplete() {
348 bool is_complete = false; 395 bool is_complete = false;
349 base::win::RegKey key_main; 396 base::win::RegKey key_main;
350 397
351 if (key_main.Open(HKEY_CURRENT_USER, kKeyIEMain, 398 if (key_main.Open(HKEY_CURRENT_USER, kKeyIEMain,
352 KEY_QUERY_VALUE) == ERROR_SUCCESS) { 399 KEY_QUERY_VALUE) == ERROR_SUCCESS) {
353 DWORD completed = 0; 400 DWORD completed = 0;
354 FILETIME completion_time = {}; 401 FILETIME completion_time = {};
355 DWORD size = sizeof(completion_time); 402 DWORD size = sizeof(completion_time);
356 403
357 if (key_main.ReadValueDW(kValueIE9Completed, 404 if (key_main.ReadValueDW(run_once_value_names_->completed,
358 &completed) == ERROR_SUCCESS && 405 &completed) == ERROR_SUCCESS &&
359 completed != 0 && 406 completed != 0 &&
360 key_main.ReadValue(kValueIE9CompletionTime, &completion_time, 407 key_main.ReadValue(run_once_value_names_->completion_time,
361 &size, NULL) == ERROR_SUCCESS && 408 &completion_time, &size, NULL) == ERROR_SUCCESS &&
362 size == sizeof(completion_time)) { 409 size == sizeof(completion_time)) {
363 is_complete = true; 410 is_complete = true;
364 } 411 }
365 } 412 }
366 413
367 return is_complete; 414 return is_complete;
368 } 415 }
369 416
370 // Returns the path to the IE9 Approved Extensions key for Chrome Frame. 417 // Returns the path to the IE9 Approved Extensions key for Chrome Frame.
371 // static 418 // static
372 string16 IE9Configurator::GetChromeFrameBHOCLSID() { 419 string16 ModernIEConfigurator::GetChromeFrameBHOCLSID() {
373 string16 bho_guid(39, L'\0'); 420 string16 bho_guid(39, L'\0');
374 int guid_len = StringFromGUID2(CLSID_ChromeFrameBHO, &bho_guid[0], 421 int guid_len = StringFromGUID2(CLSID_ChromeFrameBHO, &bho_guid[0],
375 bho_guid.size()); 422 bho_guid.size());
376 DCHECK_EQ(guid_len, static_cast<int>(bho_guid.size())); 423 DCHECK_EQ(guid_len, static_cast<int>(bho_guid.size()));
377 bho_guid.resize(guid_len - 1); 424 bho_guid.resize(guid_len - 1);
378 return bho_guid; 425 return bho_guid;
379 } 426 }
380 427
381 // Returns true if the add-on enablement prompt is disabled by Group Policy. 428 // Returns true if the add-on enablement prompt is disabled by Group Policy.
382 // static 429 // static
383 bool IE9Configurator::IsAddonPromptDisabledForChromeFrame() { 430 bool ModernIEConfigurator::IsAddonPromptDisabledForChromeFrame() {
384 bool is_disabled = false; 431 bool is_disabled = false;
385 base::win::RegKey key; 432 base::win::RegKey key;
386 433
387 // See if the prompt is disabled for this user of IE. 434 // See if the prompt is disabled for this user of IE.
388 if (key.Open(HKEY_CURRENT_USER, kKeyIEApprovedExtensions, 435 if (key.Open(HKEY_CURRENT_USER, kKeyIEApprovedExtensions,
389 KEY_QUERY_VALUE) == ERROR_SUCCESS) { 436 KEY_QUERY_VALUE) == ERROR_SUCCESS) {
390 DWORD type = REG_NONE; 437 DWORD type = REG_NONE;
391 DWORD size = 0; 438 DWORD size = 0;
392 if (key.ReadValue(GetChromeFrameBHOCLSID().c_str(), NULL, &size, 439 if (key.ReadValue(GetChromeFrameBHOCLSID().c_str(), NULL, &size,
393 &type) == ERROR_SUCCESS && 440 &type) == ERROR_SUCCESS &&
(...skipping 10 matching lines...) Expand all
404 if (key.ReadValueDW(kValueIgnoreFrameApprovalCheck, 451 if (key.ReadValueDW(kValueIgnoreFrameApprovalCheck,
405 &ignore) == ERROR_SUCCESS && 452 &ignore) == ERROR_SUCCESS &&
406 ignore != 0) { 453 ignore != 0) {
407 is_disabled = true; 454 is_disabled = true;
408 } 455 }
409 } 456 }
410 457
411 return is_disabled; 458 return is_disabled;
412 } 459 }
413 460
414 void IE9Configurator::Initialize() { 461 void ModernIEConfigurator::Initialize() {
415 // Check for per-user IE setup. 462 // Check for per-user IE setup.
416 if (!IsPerUserSetupComplete()) { 463 if (!IsPerUserSetupComplete()) {
417 const HKEY root = HKEY_CURRENT_USER; 464 const HKEY root = HKEY_CURRENT_USER;
418 // Suppress the "Set up Internet Explorer 9" dialog. 465 // Suppress the "Set up Internet Explorer" dialog.
419 setter_.AddDWORDValue(root, kKeyIEMain, kValueIE9Completed, 1); 466 setter_.AddDWORDValue(root, kKeyIEMain, run_once_value_names_->completed,
420 setter_.AddFILETIMEValue(root, kKeyIEMain, kValueIE9CompletionTime, 467 1);
468 setter_.AddFILETIMEValue(root, kKeyIEMain,
469 run_once_value_names_->completion_time,
421 base::Time::Now().ToFileTime()); 470 base::Time::Now().ToFileTime());
422 setter_.AddDWORDValue(root, kKeyIEMain, kValueIE9LastShown, 1); 471 if (ie_version_ == IE_9) {
423 // Don't show a tour of IE 9. 472 setter_.AddDWORDValue(root, kKeyIEMain, kValueIE9LastShown, 1);
424 setter_.AddDWORDValue(root, kKeyIEMain, kValueIE9TourNoShow, 1); 473 // Don't show a tour of IE 9.
474 setter_.AddDWORDValue(root, kKeyIEMain, kValueIE9TourNoShow, 1);
475 }
425 // Turn off the phishing filter. 476 // Turn off the phishing filter.
426 setter_.AddDWORDValue(root, kKeyIEPhishingFilter, kValueEnabledV9, 0); 477 setter_.AddDWORDValue(root, kKeyIEPhishingFilter, kValueEnabledV9, 0);
427 // Don't download compatibility view lists. 478 // Don't download compatibility view lists.
428 setter_.AddDWORDValue(root, kKeyIEBrowserEmulation, 479 setter_.AddDWORDValue(root, kKeyIEBrowserEmulation,
429 kValueMSCompatibilityMode, 0); 480 kValueMSCompatibilityMode, 0);
430 } 481 }
431 482
432 // Turn off the "'Foo' add-on from 'Bar' is ready for use." prompt via Group 483 // Turn off the "'Foo' add-on from 'Bar' is ready for use." prompt via Group
433 // Policy. 484 // Policy.
434 if (!IsAddonPromptDisabledForChromeFrame()) { 485 if (!IsAddonPromptDisabledForChromeFrame()) {
435 setter_.AddDWORDValue(HKEY_LOCAL_MACHINE, kKeyPoliciesExt, 486 setter_.AddDWORDValue(HKEY_LOCAL_MACHINE, kKeyPoliciesExt,
436 kValueIgnoreFrameApprovalCheck, 1); 487 kValueIgnoreFrameApprovalCheck, 1);
437 } 488 }
438 } 489 }
439 490
440 void IE9Configurator::ApplySettings() { 491 void ModernIEConfigurator::ApplySettings() {
441 setter_.Apply(); 492 setter_.Apply();
442 } 493 }
443 494
444 void IE9Configurator::RevertSettings() { 495 void ModernIEConfigurator::RevertSettings() {
445 setter_.Revert(); 496 setter_.Revert();
446 } 497 }
447 498
448 } // namespace 499 } // namespace
449 500
450 // Configurator implementation. 501 // Configurator implementation.
451 502
452 IEConfigurator::IEConfigurator() { 503 IEConfigurator::IEConfigurator() {
453 } 504 }
454 505
455 IEConfigurator::~IEConfigurator() { 506 IEConfigurator::~IEConfigurator() {
456 } 507 }
457 508
458 IEConfigurator* CreateConfigurator() { 509 IEConfigurator* CreateConfigurator() {
459 IEConfigurator* configurator = NULL; 510 IEConfigurator* configurator = NULL;
460 511
461 switch (GetInstalledIEVersion()) { 512 IEVersion ie_version = GetInstalledIEVersion();
513 switch (ie_version) {
462 case IE_7: 514 case IE_7:
463 configurator = new IE7Configurator(); 515 configurator = new IE7Configurator();
464 break; 516 break;
465 case IE_9: 517 case IE_9:
466 configurator = new IE9Configurator(); 518 case IE_10:
519 configurator = new ModernIEConfigurator(ie_version);
467 break; 520 break;
468 default: 521 default:
469 break; 522 break;
470 } 523 }
471 524
472 return configurator; 525 return configurator;
473 } 526 }
474 527
475 void InstallIEConfigurator() { 528 void InstallIEConfigurator() {
476 IEConfigurator* configurator = CreateConfigurator(); 529 IEConfigurator* configurator = CreateConfigurator();
477 530
478 if (configurator != NULL) { 531 if (configurator != NULL) {
479 testing::UnitTest::GetInstance()->listeners().Append( 532 testing::UnitTest::GetInstance()->listeners().Append(
480 new ConfiguratorDriver(configurator)); 533 new ConfiguratorDriver(configurator));
481 } 534 }
482 } 535 }
483 536
484 } // namespace chrome_frame_test 537 } // 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