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