gcapi_test.cc revision f2477e01787aa58f445919b809d89e252beef54f
13ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com// Copyright (c) 2012 The Chromium Authors. All rights reserved. 23ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com// Use of this source code is governed by a BSD-style license that can be 33ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com// found in the LICENSE file. 43ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com 53ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com#include <stdio.h> 63ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com 73ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com#include "base/at_exit.h" 83ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com#include "base/command_line.h" 93ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com#include "chrome/installer/gcapi/gcapi.h" 103ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com#include "testing/gtest/include/gtest/gtest.h" 113ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com 123ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.comvoid call_statically() { 133ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com DWORD reason = 0; 143ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com BOOL result_flag_on = FALSE; 153ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com BOOL result_flag_off = FALSE; 163ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com 173ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com // running this twice verifies that the first call does not set 183ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com // a flag that would make the second fail. Thus, the results 193ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com // of the two calls should be the same (no state should have changed) 203ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com result_flag_off = GoogleChromeCompatibilityCheck( 213ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com FALSE, GCAPI_INVOKED_STANDARD_SHELL, &reason); 22fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com result_flag_on = GoogleChromeCompatibilityCheck( 233ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com TRUE, GCAPI_INVOKED_STANDARD_SHELL, &reason); 243ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com 253ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com if (result_flag_off != result_flag_on) 263ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com printf("Registry key flag is not being set properly."); 27fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 283ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com printf("Static call returned result as %d and reason as %d.\n", 293ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com result_flag_on, reason); 303ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com} 313ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com 323ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.comvoid call_dynamically() { 333ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com HMODULE module = LoadLibrary(L"gcapi_dll.dll"); 343ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com if (module == NULL) { 353ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com printf("Couldn't load gcapi_dll.dll.\n"); 363ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com return; 373ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com } 383ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com 393ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com GCCC_CompatibilityCheck gccfn = (GCCC_CompatibilityCheck) GetProcAddress( 403ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com module, "GoogleChromeCompatibilityCheck"); 413ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com if (gccfn != NULL) { 423ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com DWORD reason = 0; 433ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com 443ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com // running this twice verifies that the first call does not set 453ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com // a flag that would make the second fail. Thus, the results 463ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com // of the two calls should be the same (no state should have changed) 473ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com BOOL result_flag_off = gccfn(FALSE, GCAPI_INVOKED_STANDARD_SHELL, &reason); 483ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com BOOL result_flag_on = gccfn(TRUE, GCAPI_INVOKED_STANDARD_SHELL, &reason); 493ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com 50fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com if (result_flag_off != result_flag_on) 513ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com printf("Registry key flag is not being set properly."); 523ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com 533ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com printf("Dynamic call returned result as %d and reason as %d.\n", 543ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com result_flag_on, reason); 553ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com } else { 563ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com printf("Couldn't find GoogleChromeCompatibilityCheck() in gcapi_dll.\n"); 573ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com } 583ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com FreeLibrary(module); 593ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com} 603ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com 613ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.comconst char kManualLaunchTests[] = "launch-chrome"; 623ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com 633ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.comint main(int argc, char* argv[]) { 643ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com base::AtExitManager exit_manager; 653ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com CommandLine::Init(argc, argv); 663ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com 673ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com testing::InitGoogleTest(&argc, argv); 683ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com RUN_ALL_TESTS(); 693ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com 70fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com if (CommandLine::ForCurrentProcess()->HasSwitch(kManualLaunchTests)) { 713ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com call_dynamically(); 723ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com call_statically(); 733ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com printf("LaunchChrome returned %d.\n", LaunchGoogleChrome()); 743ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com } 753ada0efdc8de8316df8113ec54ffd1a3f33ecd21digit@google.com} 76fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com